This tool is compiled on the developer's command line in C. It outputs a terminal output that displays the contents in the file "array_name.c" that is created. Please note that some terminals may display the character "\ b".
#include <stdio.h> #include <assert.h> 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); }
m_h Nov 29 '17 at 21:09 on 2017-11-29 21:09
source share