script / tool для преобразования файла в массив исходного кода C / C ++

Мне нужен скрипт / инструмент, который читает двоичный файл и выводит массив исходного кода C / C ++ (который представляет содержимое файла). Есть ли какие-нибудь?


(Этот вопрос был удален ранее. Я вернул этот вопрос, потому что это ценно. Я искал именно это в Google и ничего не нашел. Конечно, это просто, но я бы сэкономил несколько минут, если бы я нашел бы такой простой скрипт, поэтому он ценен.

На эти вопросы также было много голосов без объяснения причин. Пожалуйста, прокомментируйте перед тем, как вы проголосуете, почему вы считаете, что это не имеет значения или имеет плохую ценность.

Этот вопрос также вызвал много путаницы в отношении того, о чем я прошу. Если что-то неясно, спросите пожалуйста. Я не знаю, как сделать это более ясным. См. Ответы на примеры.

Также (после постановки вопроса здесь) у меня уже есть несколько ответов. Я просто хочу поместить / связать их здесь (снова), потому что я думаю, что это может быть полезно для кого-то другого, ищущего это.)

На Debian и других дистрибутивах Linux по умолчанию (вместе с vim ) установлен инструмент xxd , который, учитывая параметр -i , может делать то, что вы хотите:

 [email protected]:~/Desktop$ echo Hello World\! > temp [email protected]:~/Desktop$ xxd -i temp unsigned char temp[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x0a }; unsigned int temp_len = 13; 

Один простой инструмент можно найти здесь :

 #include  #include  int main(int argc, char** argv) { assert(argc == 2); char* fn = argv[1]; FILE* f = fopen(fn, "rb"); printf("char a[] = {\n"); unsigned long n = 0; while(!feof(f)) { unsigned char c; if(fread(&c, 1, 1, f) == 0) break; printf("0x%.2X,", (int)c); ++n; if(n % 10 == 0) printf("\n"); } fclose(f); printf("};\n"); } 

Этот инструмент компилируется в командной строке разработчика в C. Он выводит вывод на терминал, отображая содержимое в файле «array_name.c», который создается. Обратите внимание, что некоторые терминалы могут отображать символ «\ b».

  #include  #include  int main(int argc, char** argv) { assert(argc == 2); char* fn = argv[1]; // Open file passed by reference FILE* f = fopen(fn, "rb"); // Opens a new file in the programs location FILE* fw = fopen("array_name.c","w"); // Next two lines write the strings to the console and .c file printf("char array_name[] = {\n"); fprintf(fw,"char hex_array[] = {\n"); // Declare long integer for number of columns in the array being made unsigned long n = 0; // Loop until end of file while((!feof(f))){ // Declare character that stores the bytes from hex file unsigned char c; // Ignore failed elements read if(fread(&c, 1, 1, f) == 0) break; // Prints to console and file, "0x%.2X" ensures format for all // read bytes is like "0x00" printf("0x%.2X,", (int)c); fprintf(fw,"0x%.2X,", (int)c); // Increment counter, if 20 columns have been made, begin new line ++n; if(n % 20 == 0){ printf("\n"); fprintf(fw,"\n"); } } // fseek places cursor to overwrite extra "," made from previous loop // this is for the new .c file. Since "\b" is technically a character // to remove the extra "," requires overwriting it. fseek(fw, -1, SEEK_CUR); // "\b" moves cursor back one in the terminal printf("\b};\n"); fprintf(fw,"};\n"); fclose(f); fclose(fw); } в  #include  #include  int main(int argc, char** argv) { assert(argc == 2); char* fn = argv[1]; // Open file passed by reference FILE* f = fopen(fn, "rb"); // Opens a new file in the programs location FILE* fw = fopen("array_name.c","w"); // Next two lines write the strings to the console and .c file printf("char array_name[] = {\n"); fprintf(fw,"char hex_array[] = {\n"); // Declare long integer for number of columns in the array being made unsigned long n = 0; // Loop until end of file while((!feof(f))){ // Declare character that stores the bytes from hex file unsigned char c; // Ignore failed elements read if(fread(&c, 1, 1, f) == 0) break; // Prints to console and file, "0x%.2X" ensures format for all // read bytes is like "0x00" printf("0x%.2X,", (int)c); fprintf(fw,"0x%.2X,", (int)c); // Increment counter, if 20 columns have been made, begin new line ++n; if(n % 20 == 0){ printf("\n"); fprintf(fw,"\n"); } } // fseek places cursor to overwrite extra "," made from previous loop // this is for the new .c file. Since "\b" is technically a character // to remove the extra "," requires overwriting it. fseek(fw, -1, SEEK_CUR); // "\b" moves cursor back one in the terminal printf("\b};\n"); fprintf(fw,"};\n"); fclose(f); fclose(fw); } 
  • Включить двоичный файл с помощью скрипта GNU ld linker
  • Как читать двоичный файл в C #?
  • Можно ли использовать бинарный литерал в C или C ++?
  • Как подсчитать количество заданных битов в 32-битовом целое?
  • Быстрая версия функции dec2bin для преобразования многих элементов?
  • Преобразование int в двоичное строковое представление в Java?
  • В Java можно определить целочисленную константу в двоичном формате?
  • Количество отсчетов 1 в двоичном представлении
  • Преобразование шестнадцатеричной строки (hex) в двоичную строку
  • Почему мы используем Base64?
  • Преобразование двоичной строки в байтовый массив
  • Interesting Posts

    WPF: автозаполнение TextBox, … снова

    Как я могу удалить / реорганизовать декларацию зависимостей «друга»?

    Каков наилучший способ добавить два числа без использования оператора +?

    Зеленая полоса поверх каждого (сетевого) видео, искаженные цвета тоже

    Запуск java с переменной JAVA_OPTS env

    Скопировать файл на удаленный компьютер с помощью удаленных учетных данных администратора

    Как установить локальный пакет NuGet .nupkg?

    3d индексирование ядра CUDA для фильтрации изображений?

    Выровняйте несколько графиков в ggplot2, когда у некоторых есть легенды, а у других нет

    Эквивалент устаревшего события jQuery Toggle

    Android AlarmManager не работает на некоторых устройствах, когда приложение закрыто

    Внедрение iframe на страницу с ограничительной политикой безопасности контента

    Максимальный размер HashSet, Vector, LinkedList

    Почему DataTable быстрее, чем DataReader

    jQuery выбрать по classу VS выбрать по атрибуту

    Давайте будем гением компьютера.