これには (unix util)xxd を使用することをお勧めします。このように使用できます
$ echo hello world > a
$ xxd -i a
出力:
unsigned char a[] = {
0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a
};
unsigned int a_len = 12;
質問は C に関するものでしたが、誰かが C++11 でそれを行おうとすると、新しい生の文字列リテラルのおかげで、含まれているテキスト ファイルを少し変更するだけで実行できます:
C++ では次のようにします:
const char *s =
#include "test.txt"
;
テキスト ファイルで次の操作を行います:
R"(Line 1
Line 2
Line 3
Line 4
Line 5
Line 6)"
したがって、ファイルの先頭に接頭辞、末尾に接尾辞のみが必要です。文字シーケンス )"
を必要としない限り、特別なエスケープは必要ありません。 .ただし、独自のカスタム区切り文字を指定すると、これでも機能します。
R"=====(Line 1
Line 2
Line 3
Now you can use "( and )" in the text file, too.
Line 5
Line 6)====="
2 つの可能性があります:
<オール>\
)、エスケープ "
それを機能させるためのキャラクターやその他。バイトを '\xFF', '\xAB', ...., '\0'
のようなシーケンスに変換する小さなプログラムを作成する方が簡単です (または UNIX ツール xxd
を使用します) 利用可能な場合は、別の回答で説明されています!):コード:
#include <stdio.h>
int main() {
int c;
while((c = fgetc(stdin)) != EOF) {
printf("'\\x%X',", (unsigned)c);
}
printf("'\\0'"); // put terminating zero
}
(未検証)。次に、次のことを行います:
char my_file[] = {
#include "data.h"
};
data.h が生成される場所
cat file.bin | ./bin2c > data.h