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