すでにあるバイナリファイルをC言語のソースに取り込みたいことはあると思います。例えば、組み込み開発ではビットマップデータやフォントデータ、各種テーブルファイルなどをROM内部に組み込みたい場合などです。
組み込みのプログラム内にバイナリデータを組み込む場合の方法にはいろいろな種類があると思います。
たとえば、hex(またはS-record)形式のファイルをマージする方法、そして、バイナリデータをC言語で表現可能な形式にコンバートしてそのままコンパイルする方法などです。
今回は、バイナリデータをunsigned char型の配列の形式に変換する方法を解説します。
今回の説明は簡単です。以下のRubyスクリプトを実行します。このスクリプトファイル名をbin2c.rbとした場合、以下のようにコマンドラインで入力すればOKです。
C:\Work>ruby bin2c.rb test.bin test.inc
このようにすると、バイナリファイル「test.bin」がC言語の配列での指定する形式で「test.inc」というファイル名で保存されます。
スクリプトはシンプルで、以下のようになっています。
$pat = ARGV f = open($pat[0],"r"); fout = open($pat[1],"w"); cnt = 0; fout.printf("\t"); while(c = f.getc()) fout.printf("0x%02x,",c); if ((cnt+1) % 8 == 0) then fout.printf("\n\t"); end cnt = cnt + 1; end fout.printf("\n\t"); f.close; fout.close; printf("Finished\n");
上で説明したスクリプトで出力したファイルをインクルードすればOKです。仮に、バイナリから変換されたファイルをtest.incとした場合、以下のようにしてみて下さい。
const char test_bin[] = { #include "./test.inc" };
このように使用すれば、「test_bin[]」はtest.binのバイナリファイルの内容と同じものが指し示されます。