【问题标题】:C++ Object Deserialization - Where to startC++ 对象反序列化 - 从哪里开始
【发布时间】:2011-06-08 00:03:47
【问题描述】:

我从代表 C++ 对象的记录文件中获取了一大块字节。我已经获得了该对象的类定义。如何将数据(字节块)转换为对象?

我不断看到对 boost 的引用,但我认为我不能使用它,因为它不是用来序列化对象的。

有人吗?谢谢。

【问题讨论】:

  • 也许这是我正在做的愚蠢评论,但除非您使用一些标准协议,否则这不会取决于编译器和/或编译它的架构,以及可能的优化用过。
  • @LeifAndersen:编译器,是的。建筑,是的。编译器设置,是的,但不是优化设置。我认为 OP 已经意识到这一点,但仍然值得指出。
  • 你好,我回来记录我的方法。是的所有这些问题和更多的莱夫。简而言之,正如我上面所说的那样,我确实得到了指示。由于我以前从未这样做过,我认为这就是我所需要的。事实证明,供应商的文档很糟糕,因为他们的序列化数据从未打算由局外人(比如我)反序列化。我上面所说的类定义是一个 QT GUI 开发基类。我必须弄清楚供应商是如何写入文件的。而我只是在阅读时做了相反的事情,我链接了他们所说的 QT lib 版本。

标签: c++ boost deserialization


【解决方案1】:

你是对的——Boost.Serialization 不能帮助你反序列化一个它没有序列化的对象。您需要使用std::ifstream 进行未格式化的输入(调用其read 成员函数来提取字节范围)。请务必以二进制模式打开流。

【讨论】:

  • 你一针见血。这正是我所做的。我对这个任务的另一个有趣的事情是我必须在 DLL 中编写 C++ 代码,因为调用程序是用 C 编译器构建的。很有意思。谢谢大家的cmets。我有 sn-ps 的代码,如果有人进入这里并且像一个月前一样迷路了,我可以提供这些代码。
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多