2011-12-25

16進ダンプ

ファイルをダンプして見たくなることはないだろうか? バイナリファイルの中身が気になるとか。私は、たまに、ある。

標準状態の Mac OS X では hexdump とか od コマンドで16進数によるダンプリストを表示できる。

$ hexdump -C hoge.dat
00000000  25 50 44 46 2d 31 2e 34  0d 25 e2 e3 cf d3 0d 0a  |%PDF-1.4.%......|
00000010  34 34 20 30 20 6f 62 6a  0d 3c 3c 2f 4c 69 6e 65  |44 0 obj.<</Line|
00000020  61 72 69 7a 65 64 20 31  2f 4c 20 33 34 37 32 34  |arized 1/L 34724|
00000030  37 2f 4f 20 34 36 2f 45  20 33 31 38 33 34 38 2f  |7/O 46/E 318348/|
00000040  4e 20 31 2f 54 20 33 34  36 32 35 32 2f 48 20 5b  |N 1/T 346252/H [|
00000050  20 31 32 33 36 20 32 35  34 5d 3e 3e 0d 65 6e 64  | 1236 254]>>.end|
00000060  6f 62 6a 0d 20 20 20 20  20 20 20 20 20 20 20 20  |obj.            |
00000070  20 20 20 0d 78 72 65 66  0d 34 34 20 34 37 0d 30  |   .xref.44 47.0|
00000080  30 30 30 30 30 30 30 31  36 20 30 30 30 30 30 20  |000000016 00000 |
00000090  6e 0d 0a 30 30 30 30 30  30 31 36 35 36 20 30 30  |n..0000001656 00|
000000a0  30 30 30 20 6e 0d 0a 30  30 30 30 30 30 31 37 39  |000 n..000000179|
000000b0  39 20 30 30 30 30 30 20  6e 0d 0a 30 30 30 30 30  |9 00000 n..00000|
000000c0  30 32 33 36 37 20 30 30  30 30 30 20 6e 0d 0a 30  |02367 00000 n..0|
$ od -tx1 fuga.dat
... 出力結果は省略 ...

日本語を含むファイルをダンプしたい場合は「hexja - 日本語対応16進数ダンプツール」というRubyスクリプトが便利。

$ hexja -isjis ja_str.dat
00000000  93 fa 96 7b  8c ea 95 b6  8e 9a 97 f1  82 aa 8a dc  日本語文字列が含
00000010  82 dc 82 ea  82 c4 82 a2  82 e9 83 74  83 40 83 43  まれているファイ
00000020  83 8b 81 42  0a                                     ル。J

hexjaは標準インストールされるコマンドじゃないので、独自にインストールしなくてはならない。

先頭の部分だけちょっと見たいときは head にパイプして、

$ hexja hoge.dat | head -8

とする。hexjaに限らず、hexdumpでもodでも同じ。