我想将结构写入二进制文件。该结构有两个成员,一个是 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 中定义的格式的字节数组。
- 编写代码来解析您在步骤 1 中定义的字节数组并填充结构。
如果您想查找更多信息,最好使用的搜索关键字可能是“序列化”。您可以使用许多序列化库来避免每次需要序列化/反序列化数据结构时都必须经历这种复杂性。我个人喜欢protocol buffers和 boost serialization ,但有很多选择。
关于c++ - 将一个结构写成二进制,其中一个成员是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708086/