使用 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 位,您可能会得到不同的结果。
还有一个字节序问题。
建议不要使用这种方式读取数据。
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 位,您可能会得到不同的结果。
还有一个字节序问题。
建议不要使用这种方式读取数据。