将结构编写为二进制,其中一个成员是字符串

Write a struct as binary, with one member being a string?

本文关键字:一个 成员 字符串 结构 二进制      更新时间:2023-10-16

我想将结构作为二进制写入文件。该结构有两个成员,一个是仅限 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. 将结构的存储格式定义为字节流。
  2. 编写代码以将结构转换为您在步骤 1 中定义的格式的字节数组。
  3. 编写代码以分析在步骤 1 中定义的字节数组并填写结构。

如果你想找到更多信息,最好的搜索关键词可能是"序列化"。有许多序列化库可用于避免每次需要序列化/反序列化数据结构时都经历这种复杂性。我个人喜欢协议缓冲区和提升序列化,但有很多选择。