Od
解釋沒有選項的八進制轉儲
$ 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
沒有選擇比無用更糟糕 :-)