在C中以hex的forms读取文件的内容

我有一个hex值保存为hex.txt的文件

 9d ff d5 3c 06 7c 0a 

现在我需要将其转换为字符数组

 unsigned char hex[] = {0x9d,0xff,0xd5,0x3c,0x06,0x7c,0x0a} 

我该怎么做 ?

使用像这里的文件读取示例,并使用此代码读取值:

 #include  /* required for file operations */ #include  /* for clrscr */ FILE *fr; /* declare the file pointer */ main() { clrscr(); fr = fopen ("elapsed.dta", "rt"); /* open the file for reading */ /* elapsed.dta is the name of the file */ /* "rt" means open the file for reading text */ char c; while(c = fgetc(fr) != EOF) { int val = getVal(c) * 16 + getVal(fgetc(fr)); printf("current number - %d\n", val); } fclose(fr); /* close the file prior to exiting the routine */ } 

以及使用此function:

  int getVal(char c) { int rtVal = 0; if(c >= '0' && c <= '9') { rtVal = c - '0'; } else { rtVal = c - 'a' + 10; } return rtVal; } 

这段代码完成了工作!!!,但要求我们用#define FILELEN 15初始化要转换的hex的大小

 #include #define FILELEN 15 int ascii_to_hex(char c) { int num = (int) c; if(num < 58 && num > 47) { return num - 48; } if(num < 103 && num > 96) { return num - 87; } return num; } int main() { FILE *fp = fopen("sample","r"); unsigned char c1,c2; int i=0; unsigned char sum,final_hex[FILELEN/2]; for(i=0;i 

我可以提供这样的代码。 添加适当的包含。

 unsigned char * read_file(FILE * file) //Don't forget to free retval after use { int size = 0; unsigned int val; int startpos = ftell(file); while (fscanf(file, "%x ", &val) == 1) { ++size; } unsigned char * retval = (unsigned char *) malloc(size); fseek(file, startpos, SEEK_SET); //if the file was not on the beginning when we started int pos = 0; while (fscanf(file, "%x ", &val) == 1) { retval[pos++] = (unsigned char) val; } return retval; } 

执行2次传递文件。
1扫描并计算所需的字节数。
2分配所需的内存,然后重复扫描,这次保存结果。

 size_t ReadHexFile(FILE *inf, unsigned char *dest) { size_t count = 0; int n; if (dest == NULL) { unsigned char OneByte; while ((n = fscanf(inf, "%hhx", &OneByte)) == 1 ) { count++; } } else { while ((n = fscanf(inf, "%hhx", dest)) == 1 ) { dest++; } } if (n != EOF) { ; // handle syntax error } return count; } #include  int main() { FILE *inf = fopen("hex.txt", "rt"); size_t n = ReadHexFile(inf, NULL); rewind(inf); unsigned char *hex = malloc(n); ReadHexFile(inf, hex); // do somehting with hex fclose(inf); free(hex); return 0; }