Od

解釋沒有選項的八進制轉儲

  • November 17, 2014
$ echo "hello" | od
0000000 062550 066154 005157
0000006

我知道第一列代表字節偏移量。但我看不出其他數字是如何形成的。根據man上面應該是“八進製字節”。但是,該選項-b也應該“選擇八進製字節”,並且列印出不同的內容:

$echo "hello" | od -b
0000000 150 145 154 154 157 012
0000006

編輯:這是我期望出現的方式,即 ‘hello\n’ 中所有字元的 ascii 值,因為我期望被稱為“八進製字節”。

od預設情況下不顯示字節,它以八進制顯示單詞。這可能不太直覺,但不要忘記od這是一個非常古老的命令 :-) 我將使用一個比你做的更簡單的範例:

$ echo -en '\01\02' | od
0000000 001001
0000002

由於 Intel 使用little-endian架構,因此字節\01\02被解釋為00000010 00000001二進制。

由於八進制數字每個代表 3 位,我們可以像這樣對該數字進行分組:

(0)(000)(001)(000)(000)(001)

所以這兩個字節的八進製表示是:

001001

對於日常使用,這是非常沒用的;也許在過去,手動調試記憶體轉儲很方便:-)

你的hello\n例子是:

h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
\n= 00001010

現在有點複雜了,因為八進制數字代表 3 位,而字節是 8 位;所以添加了填充:-(結果象徵性地是:

PehPllP\no

請記住,由於字節順序,每組 2 個字節都會被交換。P是 2 位的填充。八進制的結果是(使用斜杠作為分隔符):

00/01100101/01101000/00/01101100/01101100/00/00001010/01101111

現在在 3 位的八進制組中:

000 110 010 101 101 000 000 110 110 001 101 100 000 000 101 001 101 111

翻譯成八進制數:

062550066154005157

這符合您的結果。

總之,您可能已經了解到,od沒有選擇比無用更糟糕 :-)

引用自:https://unix.stackexchange.com/questions/168193