用C语言解析二进制文件
我试图读取二进制文件的内容 每个组件有两组线 第一行最后一个字符表示零部件文件的类型(^A表示部件,^B表示零件) 如果类型为^A,我需要分析下一行中指定的文件,该行以名称^@用C语言解析二进制文件,c,parsing,C,Parsing,我试图读取二进制文件的内容 每个组件有两组线 第一行最后一个字符表示零部件文件的类型(^A表示部件,^B表示零件) 如果类型为^A,我需要分析下一行中指定的文件,该行以名称^@ àtype^@^Aà name^@assembly1 àtype^@^Aà name^@assembly2 àtype^@^Bà name^@apart1 àtype^@^Bà name^@apart2 当我试图解析这个文件时,我无法读取文件中的二进制字符。 第一行包含一个二进制字符(a),所以我得到一个空行。第
àtype^@^Aà
name^@assembly1
àtype^@^Aà
name^@assembly2
àtype^@^Bà
name^@apart1
àtype^@^Bà
name^@apart2
当我试图解析这个文件时,我无法读取文件中的二进制字符。
第一行包含一个二进制字符(a),所以我得到一个空行。第二行在name之后有^@,所以我只得到'name',len是4。
这是我的代码片段
FILE *fp;
char line[256];
fp = fopen(name, "rb");
fgets(line, 256, fp);
printf("line %s\n", line);
printf("len %d\n\n", strlen(line));
fgets(line, 256, fp);
printf("line %s\n", line);
printf("len %d\n\n", strlen(line));
这是输出
line
len 0
line name
len 4
我的目标是分析组件的类型(^A或^B),然后获取组件的名称。
请帮助指出如何解决此问题。
fgets
和大多数
函数使用的是文本,而不是二进制数据
我认为,“character”^@
具有二进制值0
,这会打乱所有字符串处理函数
您需要逐个字符地读取和/或不使用包含嵌入零字节的对象的字符串函数。
fgets
和大多数
函数使用的是文本,而不是二进制数据
我认为,“character”^@
具有二进制值0
,这会打乱所有字符串处理函数
您需要逐个字符读取,或者不使用包含嵌入零字节的对象的字符串函数。什么是“二进制字符”?“非二进制字符”是什么?究竟什么是“二进制字符”?“非二进制字符”是什么?请注意,
fgets
读取所有字节,包括'\0'
和以下字节——但是,您不能对该数据使用字符串函数。阅读第二行后,行[4]
是0
但是printf(“%s\n”,第+5行)
输出“assembly1”
。谢谢pmg。答案和此注释都有帮助。请注意,fgets
读取所有字节,包括'\0'
和以下字节——但是,您不能对该数据使用字符串函数。阅读第二行后,行[4]
是0
但是printf(“%s\n”,第+5行)
输出“assembly1”
。谢谢pmg。答案和这一评论都有所帮助。