目的
在Coding过程中经常需要把某文件load到IC的RAM中。
此时需要把文件转换为16进制数
,利用I2C、SPI等接口进行load操作。
Code
代码说明
由于在Coding过程中,文件转换成的十六进制数常常以头文件
的形式被调用,所以直接将代码输出样式写成头文件
的形式。
功能:将文件转换为十六进制数
用法:
- 如果定义了
FILENAME
,则直接转换宏定义的文件
$gcc bin_to_hex.c -o bin_to_hex.o
$./bin_to_hex.o > dst.h
- 如果未定义
FILENAME
,则运行程序之后需要输入文件名
$gcc bin_to_hex.c -o bin_to_hex.o
$./bin_to_hex.o
Please enter the FILE NAME to be converted: file.bin
缺点:虽然第2中方式可以很方便地输入文件名,但无法将输出内容直接导入到目标文件中,例如
./bin_to_hex.o > dst.h
如果想方便地将十六进制数据导入到目标文件,请转到另一篇Blog:Bin文件转换为十六进制(Python)
代码实例
// bin_to_hex.c
#include <stdio.h>
#include <stdlib.h>
#define FILENAME "file.bin"
inline char *input_filename(void)
{
#ifdef FILENAME
return FILENAME;
#else
char *filename = (char *)malloc(64);
printf("Please enter the FILE NAME to be converted: ");
scanf("%s", filename);
return filename;
#endif
}
int main(int argc,char *argv[])
{
int ch;
int i = 0;
FILE * fp;
char *filename = NULL;
filename = input_filename();
printf("\n\"%s\" will be converted to HEX ^_^\n\n", filename);
printf("#ifndef __ERIC_CONVERT_TO_HEX_H__\n");
printf("#define __ERIC_CONVERT_TO_HEX_H__\n\n");
printf("unsigned char array_*[] = {\n\t");
fp = fopen(filename, "rb");
if(!fp) {
printf("Fail to open %s !\n", filename);
return -1;
}
while((ch= fgetc(fp))!=EOF) {
printf("0x%02x,",(unsigned char)ch);
++ i % 16 ? printf(" ") : printf("\n\t");
}
printf("\n};\n\n");
printf("#endif /* __ERIC_CONVERT_TO_HEX_H__ */\n");
}