我现在正在用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();
这可能吗?如果不是,有没有办法只读取结构的一个值?
答案 0 :(得分:0)
查看我的二进制可移植性资料,以获得有关二进制文件及其问题的一般概念。
将整个结构写入磁盘是一个坏主意,即使您打算在同一程序中再次读取它也是如此。但是,如果您这样做,则在磁盘上创建二进制映像。你可以记录下来。它将由char字节,各种大小的大或小端整数,指针(对你完全没用),以及浮点类型的双精度和浮点数组成。
了解格式后,您可以轻松阅读。在避免算术溢出的同时对整数执行此操作有点棘手。浮点值非常困难。但是,该站点具有允许您可移植地读取浮点数据的代码。
fread()后跟fread()将起作用,直到编译器更改其结构布局策略。但由于转移到64位,此刻一直都是这样的。