将结构保存在二进制文件中,仅在C 中读取值

Saving structure in a binary file and reading only value in C++

本文关键字:仅在 读取 保存 存在 二进制文件 结构      更新时间:2023-10-16

我正在研究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();

这可能吗?如果不是这样,是否有任何方法可以读取结构的一个值?

查看我的二进制便携性材料,以获取有关二进制文件及其问题的一般想法。

即使您计划在同一程序中再次读取整个结构,也是一个坏主意。但是,应该这样做,在磁盘上创建二进制图像。您可以记录下来。它将由char字节,各种大小,指针(对您完全没有用)的大或小的整数以及浮动点类型的双打和浮动。

一旦知道格式,就可以经常阅读它。对于整数,在避免算术溢出的同时,这样做有点棘手。浮点值非常困难。但是,该站点的代码将使您能够便便读取浮点数据。

fwrite(),然后是fread(),直到编译器更改其结构布局策略为止。但这目前一直在随着64位的转移而奋斗。

https://github.com/malcolmmclean/ieee754