16 進数表示するコマンド (1) xxd
ここではバイト列を 16 進数で表示する方法を紹介します。
16 進数によってバイト列を表示するのは、16 進ダンプとかヘックスダンプなどと呼ばれます。
hexdump コマンドについては「16 進数表示するコマンド (2) hexdump」をみてください。
ヘックスダンプの動機
ヘックスダンプすると、何か問題が起きたときに調査するのに役に立つ場合があります。
例えば、文字化けしているときに、テキストエディタで開いてもゴチャゴチャの文字が表示されるだけですが、 16 進数でデータを表示することで、どんなデータが並んでいるかわかり、どんな理由で文字化けしているのかわかる場合があります。
その他、テキストエディタで開いてもみえないゴミデータ (無駄・予期せぬデータ) が混ざっていたりすることでファイルが読み込めない場合に何が起きているのか確認するのに役に立つ、などです。
xxd コマンドによる HEX ダンプ
ヘックスダンプをするためのコマンドとして、 xxd コマンドがあります。
実際にコマンドを実行してみましょう。
次のようなテキストファイル a.txt があるとします。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
xxd コマンドに、ファイル名を渡すと次のようにファイルの中身をヘックスダンプします。
$ xxd a.txt 00000000: 4142 4344 4546 4748 494a 4b4c 4d4e 4f50 ABCDEFGHIJKLMNOP 00000010: 5152 5354 5556 5758 595a 0a QRSTUVWXYZ.
標準入力からも入力を受けとるので、次のようにパイプでデータを送ることもできます。
$ echo ABC | xxd 00000000: 4142 430a ABC.
デフォルトで 1 行に 16 バイト分、 16 進数表示と ASCII 文字表示をします。
16 進数を大文字表示する場合は -u オプションを指定します。
$ xxd -u a.txt 00000000: 4142 4344 4546 4748 494A 4B4C 4D4E 4F50 ABCDEFGHIJKLMNOP 00000010: 5152 5354 5556 5758 595A 0A QRSTUVWXYZ.
上のコマンド結果でわかるように、2 バイト毎グループ化して 16 進数ダンプしています。これを例えば 4 バイト毎にグループ化するには -g オプションに続けてグループ化するバイト数 4 を指定します。
$ xxd -u -g 4 a.txt 00000000: 41424344 45464748 494A4B4C 4D4E4F50 ABCDEFGHIJKLMNOP 00000010: 51525354 55565758 595A0A QRSTUVWXYZ.
さらにグループ化された 16 進数のバイトオーダーをリトルエンディアンで表示するには、-e オプションを指定します。
$ xxd -u -g 4 -e a.txt 00000000: 44434241 48474645 4C4B4A49 504F4E4D ABCDEFGHIJKLMNOP 00000010: 54535251 58575655 0A5A59 QRSTUVWXYZ.