将结构编写为二进制,其中一个成员是字符串
Write a struct as binary, with one member being a string?
我想将结构作为二进制写入文件。该结构有两个成员,一个是仅限 POD 的成员,但问题是第二个成员是一个字符串:
struct ToWrite
{
std::string _str;
PODType _pod;
};
如果我只是将 POD 类型编写为二进制,我会这样做:
file.write((char*)&_pod, sizeof(_pod));
并回读:
const PODType& pod = *reinterpret_cast<const PODType*>(&bytes[position]);
但是,我知道字符串更复杂,因为您需要记录大小。如果我要添加第三个类成员,作为一个包含字符串大小的 int,你如何编写和读取结构?
你需要做三件事:
- 将结构的存储格式定义为字节流。
- 编写代码以将结构转换为您在步骤 1 中定义的格式的字节数组。
- 编写代码以分析在步骤 1 中定义的字节数组并填写结构。
如果你想找到更多信息,最好的搜索关键词可能是"序列化"。有许多序列化库可用于避免每次需要序列化/反序列化数据结构时都经历这种复杂性。我个人喜欢协议缓冲区和提升序列化,但有很多选择。
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 使用只有一个成员的工会的目的是什么?
- 访问从联合与另一个成员集复制的联合中的一个成员是否未定义或未指定?
- std::mutex作为一个成员变量对多个线程来说是安全的吗
- 使用线程从另一个成员函数调用一个Member函数
- 如何通过指针将模板成员函数传递给另一个成员函数
- 只有一个成员的匿名联盟
- 复制一个对象并使两者共享一个成员变量 (C++)
- 初始化指针或引用成员变量以指向另一个成员
- 在另一个成员函数中调用成员函数时'int'之前的预期主表达式
- C 将成员函数作为参数传递给另一个成员函数
- 将结构编写为二进制,其中一个成员是字符串
- 如何在另一个成员函数中修改具有常量返回类型的成员函数的返回值
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 如何使一个成员变量等于在main()中设置的另一个成员变量
- 在另一个成员中动态添加类成员
- 在对结构数组的一个成员进行排序后,移动其成员的其余部分
- 将类成员函数作为参数从同一类的另一个成员函数传递