私のCソースコードに(一時的にテスト目的で)バイナリファイルを含めたいので、ファイルの内容を次のC文字列にインポートしたいと思います。
\x01\x02\x03\x04
od
またはユーティリティを使用してこれは可能ですかhexdump
?必須ではありませんが、文字列が16個の入力バイトごとに次の行に折り返され、各行の先頭と末尾に二重引用符を含めることができると思います。
文字列にNULL値が含まれて\x00
いることがわかっているため、これらのバイトが文字列を早期に終了しないようにするには、コードで文字列の長さを指定する必要があります。
ベストアンサー1
xxd
これを行うパターンがあります。-i
/オプションは--include
次のことを行います。
Cの出力にはファイルスタイルが含まれています。 xxdがstdinから読み取らない限り、完全な静的配列定義(入力ファイル名にちなんで命名)を作成します。
他の文字配列と同様に、書き込み用にファイルにダンプしてから#include
アクセスfoo
(またはリンク)できます。また、配列長宣言も含まれます。
出力は80バイトに圧縮され、デフォルトで直接作成したものと同じです。
$ xxd --include foo
unsigned char foo[] = {
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64,
0x21, 0x0a, 0x0a, 0x59, 0x6f, 0x75, 0x27, 0x72, 0x65, 0x20, 0x76, 0x65,
0x72, 0x79, 0x20, 0x63, 0x75, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x21, 0x20,
0x57, 0x65, 0x6c, 0x6c, 0x20, 0x64, 0x6f, 0x6e, 0x65, 0x2e, 0x0a
};
unsigned int foo_len = 47;
xxd
やや奇妙なことに、これはvim
ディストリビューションの一部なので、すでに持っているでしょう。そうでなければそこから得ることができます。ソースから直接ツールをビルドすることもできますvim
。