在C中解析二进制文件

vin*_*aym 1 c parsing

我正在尝试读取它的内容的二进制文件它为每个组件有两组行第一行的第二个最后一个字符表示组件文件的类型(^ A表示汇编,^ B表示部分)如果类型是^一个我需要解析在明年与开始行中指定的文件名^ @

àtype^@^Aà
name^@assembly1

àtype^@^Aà
name^@assembly2

àtype^@^Bà
name^@apart1

àtype^@^Bà
name^@apart2
Run Code Online (Sandbox Code Playgroud)

当我尝试解析此文件时,我无法读取文件中的二进制字符.第一行包含二进制字符(à),所以我得到一个空行.第二行在名称后面有^ @,所以我只得到'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));
Run Code Online (Sandbox Code Playgroud)

这是输出

line 
len 0

line name
len 4
Run Code Online (Sandbox Code Playgroud)

我的目标是解析组件的类型(^ A或^ B),然后获取组件的名称.请帮忙指出如何解决这个问题.

pmg*_*pmg 5

fgets并且大多数<stdio.h>函数使用文本,而不是二进制数据.

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

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