在C中解析二进制文件

时间:2011-10-10 18:54:23

标签: c parsing

我正在尝试读取二进制文件的内容 每个组件有两组线 第一行的倒数第二个字符表示组件文件的类型( ^ A 用于装配, ^ B 用于部件) 如果类型为 ^ A ,我需要解析下一行中指定的文件,该文件以 name ^ @

开头
àtype^@^Aà
name^@assembly1

àtype^@^Aà
name^@assembly2

àtype^@^Bà
name^@apart1

àtype^@^Bà
name^@apart2

当我尝试解析此文件时,我无法读取文件中的二进制字符。 第一行包含二进制字符(à),因此我得到一个空行。第二行在名称后面有 ^ @ ,所以我只得到'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),然后获取组件的名称。 请指出如何解决这个问题。

1 个答案:

答案 0 :(得分:5)

fgets和大多数<stdio.h>功能都可以使用文本,而不是二进制数据。

我认为“{”^@具有二进制值0,它会混淆所有字符串处理函数。

您需要逐个字符地读取和/或不使用包含嵌入零字节的对象的字符串函数。