ちまちま打ち込むのは耐えられないので、ツールがあったはず、と記憶を頼りに探すも、見つからない。
あきらめて、バイナリダンプを出力するツールを使うことにした。
Linuxコマンド集 - 【hexdump】16進数や8進数で出力する:ITpro
- 繰返し回数
- バイト数
- フォーマット
$ hexdump -e '"%07.7_ax " 8/2 "%04x " "\n"' sample
???
これで、確かに書かれているように、最初にオフセット、続けて16進数で2byteごとに8列並んだ出力になるのだが、何を意味しているかわからん・・・。
フォーマットの書きかたにならって、上記を分解する。
1番目
フォーマット
- "%07.7_ax "
- 2番目
- 繰返し回数
- 8
- バイト数
- 2
- フォーマット
- "%04x "
- 繰返し回数
- 3番目
- フォーマット
- "\n"
- フォーマット
- 最初の_axのところは、オフセットの16進数表記で、%07.7は0パディングの7桁。
- 次の8/2は、次のフォーマットを8回繰り返し、1回のバイト数は2byteという意味。
- フォーマットの%04xは、0パディングの4桁16進数。
- 最後は改行。
では、C言語の配列風にするとなると、こんな感じだろう。
- オフセットはいらない
- 1byteずつにする
- 各バイトの先頭には0x、後ろにはコンマがいる
- 1行は8列くらいが妥当か
えい!
$ hexdump -e '8/1 "0x%02x, " "\n"' abcdef.bin
0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02,
0x81, 0x81, 0x00, 0xc7, 0x78, 0x20, 0x72...
おー、こういうのでいいんだよ、こういうので。
弱点あり。
返信削除終わりが8byteというか、列に満たないとこんな感じになる。
0x00, 0x01, 0x , 0x , 0x , 0x , 0x , 0x ,