使用 reinterpret_cast 将文件读入结构

Using reinterpret_cast to read file into structure

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));
}

为什么我需要使用 "reinterpret_cast" 而不是

来阅读

"InputFile.read(&FileDatas, sizeof(FileDatas))" ?

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

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

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

还有一个字节序问题。

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