オプションなしの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

編集:ところで、これは私が期待するように「8進バイト」と呼ばれる「hello \ n」のすべての文字のASCII値が表示されると予想するものです。

ベストアンサー1

odデフォルトでは、バイトは表示されず、単語は8進数で表されます。直感的ではないかもしれませんが、忘れないでくださいod非常に前のコマンド:-)私はあなたよりも簡単な例を使います:

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

Intelが使用しているためリトルエンディアン方式建築学、バイトはバイナリ\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要約すると、オプションがないことが役に立たないよりも悪いことがわかりました。 :-)

おすすめ記事