使用reinterpret_cast将文件读入结构

时间:2018-03-29 22:27:27

标签: c++ inputstream binary-data reinterpret-cast

struct DATAs
{
    char data1;
    short data2;
    short data3;
    float data4;
    int data5;
    short data6;
    unsigned short data7;
    short data8;
    char data9;
};

void fixFile(char* filename)
{
    std::ifstream InputFile;
    InputFile.open(filename, std::ios::binary);

    DATAs FileDatas;
    InputFile.read(reinterpret_cast<char*>(&FileDatas), sizeof(FileDatas));
}

为什么我需要使用&#34; reinterpret_cast&#34;阅读而不是

&#34; InputFile.read(&amp; FileDatas,sizeof(FileDatas))&#34; ?

2 个答案:

答案 0 :(得分:3)

Math class的第一个参数的类型是std::ifstream::read()。类型char*的指针不会在C ++中自动转换为DATAs*。因此,您需要使用char*

答案 1 :(得分:0)

此代码是未定义的行为。 类字段可以与某个特定地址对齐以提高性能。

类型的大小也没有明确定义,因此如果您编写32或64位程序,可能会有不同的结果。

还有一个endian问题。

建议不要使用这种方法读取数据。