欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bin文件数据处理,读取一个文件数据写入另一个文件中

程序员文章站 2024-03-25 11:45:28
...

C程序读取一个Bin文件数据,然后存入另一个Bin文件

最近工作遇到需要bin文件数据处理,对程序语言其实不大熟悉,还是凭着一些浅显的C语言基础,各种折磨一天时间才实现了工作需求,好了,废话不多说,直接上正题;

预期目标:将data.bin文件中以00 28 00 开头的单独读取出来后,并写入新建的data1.bin文件中。如下图
bin文件数据处理,读取一个文件数据写入另一个文件中
bin文件数据处理,读取一个文件数据写入另一个文件中
对于bin文件我就不多说了,因为用的比较少,只知道它是二进制数据文件,因为方便芯片烧录因此拿来用下。大致说明下上图中,offset为每一行的偏置量,可以理解为每一行行首的字节位置。我们需求是每16个字节为一条指令,当然这是可变的,后面“;”之后的便是前面数据对应的ASCII值。

    **下面便是我的代码,聊做记录**
#include <stdio.h>

FILE *fi, *fo;
char fni[511] = "data.bin";
char fno[511] = "data1.bin";
int c, n, i;
int main() {
	fi = fopen(fni, "rb");
	if (NULL == fi) {
		fprintf(stderr, "Can not open file %s!\n", fni);
		return 1;
	}
	fo = fopen(fno, "wb");
	if (NULL == fo) {
		fclose(fi);
		fprintf(stderr, "Can not create file %s!\n", fno);
		return 2;
	}
	n = 0;
	i = 1;
	while (1) {
		c = fgetc(fi);
		if (EOF == c) break;
		fprintf(fo, "%c", c);
		n++;
		if ((n % 16) == 0)
		{
			//fprintf(fo, "\n");
			for (i = 1; i < 17; i++)
			{
				c = fgetc(fi);
			}
			n = n + 16;
		}
		
	}
	fclose(fo);
	fclose(fi);
	

运行结果:
bin文件数据处理,读取一个文件数据写入另一个文件中
值得注意的一点是:
==1、==在代码中,fprintf(fo, “\n”); 这条其实是多余的,因为本来data.bin就是16个字节为一条,不需要在进行一次换行。而且在加上这句后,执行后相应位置会出现0D 0A,这就是在C语言读取到边界位置时多读取了“\n”后出现的无意义数值,如下图。
bin文件数据处理,读取一个文件数据写入另一个文件中
==2、==bin文件的打开读取或者写入,应该是二进制的,方式都必须加“b”例如:“wb”、“rb”,并且必须注意我们读取用的是fgetc(),它读取的是一个字符,在往data1.bin文件中写入时,实际写入位置在ASCII区域,因此需要确定格式为字符写入,不然就会出现错误例如下图:
bin文件数据处理,读取一个文件数据写入另一个文件中