[英]How to read a file with mixed binary and ASCII data using C++
我需要使用C ++和纯std(无Boost)读取带有混合二进制和ASCII数据的文件。 此数据通常包含嵌套二进制和ASCII标头的混合,后跟二进制数据和逗号分隔数据。 数据没有很好地对齐,二进制头定义了ASCII数据的字节数,从头到头可以变化。 一部分数据如下所示:
[binary header][binary data]The,ASCII,data,[binary header][binary data]is,not,continuous,...
我找到了很好的教程,使用读取二进制数据和getline的ASCII数据,我知道我可以使用字符逐字节读取,但我想知道你们之前是否有任何人必须处理这种情况,并且有任何有用的建议解决这个问题的最佳方法。
如果要解析文件,则需要事先知道它是如何构造的。
虽然一个文件可以是一个表,其中列以逗号分隔,行由新行分隔,但另一个文件可能是XML或具有特定字段定义的完全二进制文件。
如果混合使用二进制和ASCII数据,则必须将其全部读取为二进制文件。
ASCII字符不超过表示可读字符的二进制数字。
因此,您需要事先知道文件的构建方式以及文件中每个字节的含义。
读取此类文件的一种常见方法是使用文件中的字段创建一个结构,然后只需将文件读入其中即可。
例如:
#include <stdio.h>
#include <stdlib.h>
typedef struct mystruct_st
{
int var1;
char var2;
char text[10];
}mystruct_t;
mystruct_t mystruct;
int main () {
FILE * pFile;
pFile = fopen ( "myfile.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
fread (&mystruct,sizeof(mystruct_t),1,pFile);
fclose (pFile);
return 0;
}
唯一真正的问题是知道在文件中的格式之间切换的位置。 您必须以二进制模式打开文件(但无论如何通常都是可移植文件的情况)。 除此之外,您必须知道何时在二进制格式(您必须实现,因为标准中没有)和文本格式之间切换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.