我正在尝试读取二进制文件的内容 每个组件有两组线 第一行的倒数第二个字符表示组件文件的类型( ^ 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),然后获取组件的名称。 请指出如何解决这个问题。
答案 0 :(得分:5)
fgets
和大多数<stdio.h>
功能都可以使用文本,而不是二进制数据。
我认为“{”^@
具有二进制值0
,它会混淆所有字符串处理函数。
您需要逐个字符地读取和/或不使用包含嵌入零字节的对象的字符串函数。