我正在使用以下代码,使用C++类读取简单的二进制数据,不使用指针且没有填充:
#include <fstream>
#include <iostream>
using namespace std;
class Data {
public:
int a;
int b;
short int c;
double d;
}__attribute__((packed));
int main() {
Data myData;
ifstream ifs("test.bin", ios::binary);
ifs.read((char *)&myData, sizeof(myData));
ifs.close();
}
我使用这种方法是因为数据可能有20多种不同的格式,我想编写20多个不同的类来覆盖可能出现的所有格式。我还阅读到其他选项,包括使用位域、#pragma指令,甚至是boost序列化例程(我不能使用std)。我的问题是:使用类读取简单的二进制数据而不填充是否是最好的方法?您是否建议其他替代方法?我想了解哪种方法是最安全和最广泛使用的。
#pragma pack(push,0)
来让你的代码被更多编译器支持。但是,这两种方法都不能保证被C++支持。 - Drew Dormann