c++ - 将一个结构写成二进制,其中一个成员是一个字符串?

标签 c++ binary

我想将结构写入二进制文件。该结构有两个成员,一个是 POD-only 但问题是第二个成员是一个字符串:

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 中定义的字节数组并填充结构。

如果您想查找更多信息,最好使用的搜索关键字可能是“序列化”。您可以使用许多序列化库来避免每次需要序列化/反序列化数据结构时都必须经历这种复杂性。我个人喜欢protocol buffersboost serialization ,但有很多选择。

关于c++ - 将一个结构写成二进制,其中一个成员是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708086/

相关文章:

c++ - 间接运算符是否会更改内存表示?

PHP Apple iOS 推送通知 : Command2 : Binary Interface and Notification Format

java - 执行按位运算将位集空间减半时出现意外行为

javascript - 为什么javascript按位与二进制数会增加二进制字符串的长度

将二进制转换为十六进制

javascript - 在 Javascript 中将非 unicode 二进制字符串转换为字节数组

c++ - 我如何知道 HWND 是否是桌面本身?

c++ - 如何检查 lldb 是否可以附加到二进制文件?

C++ "Dynamic"C 回调函数的函数指针

c++ - 将 std::apply 与可变参数包一起使用