1
我正在学习C++中的二进制文件。我有一个关于在二进制文件中读写结构或类的问题。例如,如果我有这样的结构,将结构保存在二进制文件中并只读取C++中的值
struct A {
char a1;
int a2;
double a3;
};
,然后我可以节省的结构与代码一样,
A a = {'a', 2, 3.5};
ofstream file;
file.open("file.dat", ios::binary);
file.write((char*)&a, sizeof(a));
file.close();
的问题是,我可以读不整的结构,但只有结构中的价值?例如,如果我想读取结构的整数值,那么,
ifstream file;
int i = 1;
file.open("file.dat", ios::binary);
file.seekg(sizeof(char), ios::beg);
file.read((char*)&i, sizeof(i));
file.close();
这可能吗?如果不是,有没有办法只读取结构的一个值?
结构不对齐的,所以你应该保持一致, –
有结构成员之间的填充。 'a2'与结构的起始位置偏移4,而不是假设偏移1。使它成为'file.seekg(offsetof(A,a2),ios :: beg);'。毕竟,阅读整个结构可能会更容易。 –
二进制文件通常取决于平台。研究“Endianess”。而且,指针不可移植,特别是在同一个可执行文件的调用之间。 –