繁体   English   中英

如何使用C ++读取具有混合二进制和ASCII数据的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM