gpt4 book ai didi

C++ 对象序列化

转载 作者:行者123 更新时间:2023-11-28 03:39:16 25 4
gpt4 key购买 nike

我需要在 C++ 中获取对象的字节流。如果不使用序列化,我无法找到执行此操作的方法。

NodeEntry *one = new NodeEntry("mani", 34, 56.3);

ofstream rofs("result.ros", ios::binary);
rofs.write((char *)&one, sizeof(one));
rofs.close();

// now we read the file into object!!
ifstream ifsr("result.ros", ios::binary);
NodeEntry *oner;
ifsr.read((char *)&oner, sizeof(oner));

还有其他解决方法吗?我不想通过网络发送这个对象或将它存储在硬盘上。我只想获取对象 one 的字节流,而无需实际创建文件。

换句话说,我需要创建对象 one 的字节流并将其存储在某处(例如在 ostream 中),然后将这些字节传递给另一个方法并从这些字节重建对象.

如果你能给我一些提示,我将不胜感激。

最佳答案

您确实意识到您正在写one地址,对吧?基本上你写的是等同于:

NodeEntry** doublePtr = &one;
oner = *doublePtr;

如果你想写对象的内容,你可以将one传递给writesizeof(NodeEntry),但是作为Dvir Volk 提到,对于包含指针的任何内容,这都无法正常工作(或者至少可能无法正常工作)。

反正我喜欢Google's Protocol Buffers用于序列化对象。这是解决您的问题的更强大的解决方案。

此外,“字节流”毫无意义……您是说对象的原始内存(以字节为单位)吗?

关于C++ 对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com