解釋不帶選項的八進制轉儲

解釋不帶選項的八進制轉儲
$ 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值,就像我期望的那樣被稱為“八進位位元組”。

答案1

od預設不顯示字節,它顯示八進制的單字。這可能不太直觀,但不要od忘記非常舊命令:-) 我將使用一個比您更簡單的範例:

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

由於英特爾使用小尾數法建築學,位元組\01\02被解釋為00000010 00000001二進制。

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

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

所以這 2 個位元組的八進位表示為:

001001

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

你的hello\n例子是:

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

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

PehPllP\no

請記住,由於位元組順序,每組 2 個位元組都會被交換。這是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沒有選擇比無用更糟糕:-)

相關內容