将结构保存在二进制文件中,仅在C 中读取值
Saving structure in a binary file and reading only value in 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();
这可能吗?如果不是这样,是否有任何方法可以读取结构的一个值?
查看我的二进制便携性材料,以获取有关二进制文件及其问题的一般想法。
即使您计划在同一程序中再次读取整个结构,也是一个坏主意。但是,应该这样做,在磁盘上创建二进制图像。您可以记录下来。它将由char字节,各种大小,指针(对您完全没有用)的大或小的整数以及浮动点类型的双打和浮动。
一旦知道格式,就可以经常阅读它。对于整数,在避免算术溢出的同时,这样做有点棘手。浮点值非常困难。但是,该站点的代码将使您能够便便读取浮点数据。
fwrite(),然后是fread(),直到编译器更改其结构布局策略为止。但这目前一直在随着64位的转移而奋斗。
https://github.com/malcolmmclean/ieee754
相关文章:
- 如何用参数值调用函数(仅在运行时已知)
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 为什么缓冲区的内容在读取空 rdbuf 时被删除?
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何使布尔变量仅在设置为 true 时才为真?
- C++,Qt:仅在双击后编辑qtablewidget项目
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 仅在大型阵列上出现合并排序分段错误
- 仅在可变模板类中调用现有函数
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 我可以在中断中写入向量,然后以安全的方式仅在主线程内读取吗?
- 将结构保存在二进制文件中,仅在C 中读取值
- 如何设置`wxtl_3state`复选框仅在`wxtreelistCtrl?'中读取
- C 仅在有更多内容时从文件中读取
- 声明仅在C 中使用读取属性的接口
- 如何仅在值高于或低于特定阈值时读取数据
- 提升Inteprocess共享内存 - 仅在一个应用程序中无法读取