仕事でバイナリファイルを使うことが多くなってきて、毎回ググるのもいい加減めんどうになってきたのでQiitaにまとめようと思います。
他にいい方法を知っている方がいれば情報を共有してもらえると嬉しいです!
1. バイナリファイル表示方法
私がよく使っているやつです。
xxdコマンド
$ xxd sample.bin
00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
00000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................
odコマンド
- -tx2:2Byte単位で16進数を表示
- -z:ASCII文字表示
$ od -tx2z sample.bin # リトルエンディアン表示です
0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e >................<
0000020 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e >................<
0000040
(おまけ)hexdump for VSCode
データ量が多いバイナリファイルがあるときはVSCodeの拡張機能の「hexdump for VSCode」を使っています。
使用方法は、こちらの記事を参考にさせていただきました。
2. バイナリファイル作成方法
echoコマンド + リダイレクトでバイナリファイルを作成
数Byteくらいのバイナリファイルを作成するときにおすすめです。
$ echo -en "\x00\x01\x02\x03" > sample.bin
テキストファイルからバイナリファイルを作成
$ cat sample.txt # 例)1Byte単位
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
$ cat sample.txt # 例)2Byte単位
0001 0203 0405 0607 0809 0a0b 0c0d 0e0f
1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
xxdコマンドの-r -pで空白と改行は無視されるので、1Byte単位、2Byte単位~(以下略)で区切ったテキストファイルに対応できます。ありがたや。
$ cat sample.txt | xxd -r -p > sample.bin
3. バイナリファイルからunsigned char配列形式に変換する方法
今回は16を指定しているので、16Byte単位で改行されています。もっと早く知りたかった…
$ xxd -i -c 16 sample.bin
unsigned char sample_bin[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
};
unsigned int sample_bin_len = 32;
4. バイナリファイル編集方法
ddコマンドの存在は知っていますが、目下vimばかり使っています。
vim
- vimを-bオプションをつけて開く
- コマンドラインモードで「:%!xxd」→「バイナリ編集」→「:%!xxd -r」
- vimを終了