bin文件数据处理,读取一个文件数据写入另一个文件中
程序员文章站
2024-03-25 11:45:28
...
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区域,因此需要确定格式为字符写入,不然就会出现错误例如下图:
推荐阅读
-
bin文件数据处理,读取一个文件数据写入另一个文件中
-
【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中
-
编写一个程序,将一个文本文件的内容按行读出,每读出一行就顺序加上行号,并写入 到另一个文件中。
-
开启一个文本文件,并将该文档内字符以相反次序输出到另一个文档中 博客分类: Java Java打开文本文件读取文本文件字符串反序输出写入文本文件
-
php 数据能够获取 但无法写入数据库 同一文件另一个表可能写入
-
NI-SystemLink Python 读取一个TDMS文件中每一个Group,每一个Channel,把数据放在一个List中
-
java读取csv文件并修改写入另一个文件
-
PHP从一个TXT资料读取数据,匹配后符合条件的写入另一个TXT文件
-
从数据库中读取一个图片并保存为一个图片文件
-
Python读取txt文件应用---用python实现读取一个txt文档,并根据相应判断条件在txt文件中,每一行内写入指定数据。