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; ?
答案 0 :(得分:3)
Math class
的第一个参数的类型是std::ifstream::read()
。类型char*
的指针不会在C ++中自动转换为DATAs*
。因此,您需要使用char*
。
答案 1 :(得分:0)
此代码是未定义的行为。 类字段可以与某个特定地址对齐以提高性能。
类型的大小也没有明确定义,因此如果您编写32或64位程序,可能会有不同的结果。
还有一个endian问题。
建议不要使用这种方法读取数据。