バイナリデータをソースファイルに取り込む
コード書いとる?
バイナリデータをC言語のソースファイルからインクルードしたいのだが...という時に便利な手法を見つけたのでメモ書き。ここはnote
動機
何を言っているんだ?と思いますが、なんつーか、わざわざファイル読み込み処理やらなんやらかんやら実装したくない状況ってあるじゃないですかー。メモリ効率とか無視してとりあえず動いて欲しいので直接ソースファイルにchar配列で記述したい時もあるんですよ!刹那的プログラミング!!
xxdコマンド
調べてみたらありました!xxdコマンド!Linux向けのコマンドですがmacOSにもありました!Windowsの人は...こことか参考にするといいかもしれない
使い方は...ターミナルにて
xxd -i path-to-file
で標準出力に実行結果が出力されますので後はご自身の望むままに!
出力は例えばこんな感じ。これは2x2で白で塗り潰されたpng画像!
unsigned char test_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02,
0x08, 0x02, 0x00, 0x00, 0x00, 0xfd, 0xd4, 0x9a, 0x73, 0x00, 0x00, 0x00,
0x0d, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0xf8, 0x0f, 0x06, 0x50,
0x0a, 0x00, 0x53, 0xba, 0x0b, 0xf5, 0x7a, 0xec, 0x08, 0x9f, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
unsigned int test_png_len = 70;
スッキリ!