Bin文件转换为十六进制(C语言)

目的

在Coding过程中经常需要把某文件load到IC的RAM中。
此时需要把文件转换为16进制数,利用I2C、SPI等接口进行load操作。

Code

代码说明

由于在Coding过程中,文件转换成的十六进制数常常以头文件的形式被调用,所以直接将代码输出样式写成头文件的形式。

功能:将文件转换为十六进制数
用法:

  1. 如果定义了FILENAME,则直接转换宏定义的文件
    $gcc bin_to_hex.c -o bin_to_hex.o
    $./bin_to_hex.o > dst.h
  2. 如果未定义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");
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值