オプションなしの8進ダンプの解釈

オプションなしの8進ダンプの解釈
$ echo "hello" | od
0000000 062550 066154 005157
0000006

最初の列がバイト オフセットを表すことはわかっています。しかし、他の数字がどのように形成されるかはわかりません。man上記によると、「8 進バイト」になるはずです。ただし、オプションは-b「8 進バイトを選択」することも想定されており、異なる内容が出力されます。

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

編集: ちなみに、これは私が期待する表示です。つまり、 'hello\n' 内のすべての文字の ASCII 値は、私が「8 進バイト」と呼ぶものと期待するものです。

答え1

odデフォルトではバイトを表示せず、8進数でワードを表示します。これはあまり直感的ではないかもしれませんがodとても古いコマンド :-) あなたよりも少し簡単な例を使用します:

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

インテルはリトルエンディアン建築バイトはバイナリ\01\02として解釈されます00000010 00000001

8 進数はそれぞれ 3 ビットを表すため、次のようにその数値をグループ化できます。

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

したがって、これらの 2 バイトの 8 進表現は次のようになります。

001001

日常的な使用では、これはほとんど役に立ちません。おそらく、昔はメモリ ダンプを手動でデバッグするのに便利だったのでしょう :-)

例は次hello\nのとおりです:

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

8進数は3ビットを表しますが、バイトは8ビットなので、少し複雑になります。そのため、パディングが追加されます:-( 結果は記号的に次のようになります:

PehPllP\no

覚えておいてください、2バイトの各セットはエンディアンによりスワップされます。2 ビットのパディングです。8 進数での結果は次のようになります (区切り文字としてスラッシュを使用)。

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

3 ビットの 8 進グループでは次のようになります。

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

8進数に翻訳すると次のようになります。

062550066154005157

これはあなたの結果と一致します。

od結論として、オプションがないのは役に立たないどころか、もっと悪いことだと学んだと思います:-)

関連情報