【问题标题】:Serialize flatbuffer to c++ string将 flatbuffer 序列化为 C++ 字符串
【发布时间】:2021-12-17 13:32:49
【问题描述】:

在 Protobuf 我有方法 SerializeAsString (SerializeToString)。 如何在fbs中序列化为字符串? 不知怎的,我在任何地方都找不到这个。

【问题讨论】:

  • 是什么让您认为 flatbuffers 中有这样的功能?
  • 你在说什么? The tutorial 清楚地展示了如何从构建器中获取内存缓冲区。
  • @Botje 已退出构建器,是的。但是我只有在发送缓冲区时才有构建器。我在解析它时没有构建器。
  • 如果你已经有一个序列化的缓冲区,为什么还要把它转换成字符串呢?无论如何,我可以在十分钟内找到this
  • @Botje 天哪,太畏缩了。我已经用过id,但完全忘记了。我也试图通过该页面上的“字符串”一词进行 grep,不知道出了什么问题。非常感谢!

标签: c++ flatbuffers


【解决方案1】:

在 cmets Botje 回答了这个问题 - 使用 mini reflection

auto s = flatbuffers::FlatBufferToString(flatbuf, MonsterTypeTable());

【讨论】:

  • 这会将已经序列化的 FlatBuffer 转换为 JSON,我认为这不是被问到的。我猜他们只是希望将内存缓冲区复制到 std::string,这就是 ProtoBuf 版本所做的
  • 是的,实际上这是我的问题。在意识到 FlatBufferToString 仅用于调试后,我忘记了返回那里。我需要 Proto 的功能。
  • 在这种情况下,您需要类似于std::string((const char *)fbb.GetBufferPointer(), fbb.GetSize()) 的东西。该字符串将包含二进制表示,而不是文本。这是一个副本,所以当然更好的是,如果你能说服接收字符串的人改为使用指针 + 大小。
猜你喜欢
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多