用C语言解析二进制文件

用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),所以我得到一个空行。第

我试图读取二进制文件的内容 每个组件有两组线 第一行最后一个字符表示零部件文件的类型(^A表示部件,^B表示零件) 如果类型为^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。答案和这一评论都有所帮助。