只写结构体的某些字段
Only write some of the fields of a struct
假设我有一个看起来像
struct REC {
char dont_print;
int also_don't_print;
long print_this;
char also_print_this
};
如果我要写所有的字段,它看起来像
out_file.write((char*) &rec, sizeof(struct REC));
只写最后一个字段的最佳方法是什么?我想到了几个选项,但每个选项似乎都不清楚,如果代码的其他部分发生变化,它们可能会中断。
out_file.write((char*) &rec.print_this, sizeof(struct REC) - sizeof(char) - sizeof(int));
out_file.write((char*) &rec.print_this, sizeof(long) + sizeof(char));
out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(struct REC) - sizeof(char) - sizeof(int));
out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(long) + sizeof(char));
我想知道是否有更好的方法,尤其是引用字段名称而不是类型的东西。 注意:就我而言,我将为几个不同的结构执行此操作,所有这些结构都具有我想忽略的相同几个字段,但这些结构之后有不同的字段。
您可以使用offsetof
宏。
out_file.write(((char*)&rec) + offsetof(REC, print_this),
sizeof(struct REC) - offsetof(REC, print_this));
相关文章:
- 将结构字段的类型展开为可变模板参数
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何使用位字段将数据从二进制文件复制到结构中?
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何避免在数据结构中包含存储为字段的类?
- 带有 char[] 字段的 POD 结构的 constexpr 构造
- 初始化派生结构的基部分/意外打包派生结构字段以对齐基结构的间隙
- 结构数组中所有类似字段的总和
- 如何为结构字段动态分配字符空间
- 使用 Boost::Hana 中的 BOOST_HANA_DEFINE_STRUCT 定义具有 40 个以上字段的结构
- 只写结构体的某些字段
- MEMCMP以相同(零值)位字段结构返回非零
- 位字段结构分配意外行为
- 从c++到c#的包含数组字段的结构体的封送数组
- 有条件地初始化一个结构体字段——仅当它存在于该结构体中时
- 如何根据结构体的字段之一对结构指针列表进行排序?
- 一个具有unique_ptr字段的结构体,但具有不同的删除器
- 使用模板检查结构体中的字段,启用函数if,并在失败时给出一个漂亮的错误消息
- 如何检查大结构体中的所有字段是否由编译器初始化