300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > bin文件数据处理 读取一个文件数据写入另一个文件中

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

时间:2020-02-03 15:38:13

相关推荐

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

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

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

预期目标:将data.bin文件中以00 28 00 开头的单独读取出来后,并写入新建的data1.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);

运行结果:

值得注意的一点是:

==1、==在代码中,fprintf(fo, “\n”); 这条其实是多余的,因为本来data.bin就是16个字节为一条,不需要在进行一次换行。而且在加上这句后,执行后相应位置会出现0D 0A,这就是在C语言读取到边界位置时多读取了“\n”后出现的无意义数值,如下图。

==2、==bin文件的打开读取或者写入,应该是二进制的,方式都必须加“b”例如:“wb”、“rb”,并且必须注意我们读取用的是fgetc(),它读取的是一个字符,在往data1.bin文件中写入时,实际写入位置在ASCII区域,因此需要确定格式为字符写入,不然就会出现错误例如下图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。