您可以将元数据包含到生成的平缓冲区头中吗?

时间:2017-10-23 02:48:33

标签: flatbuffers

我目前正通过UART在PC和ARM M4微控制器之间发送数据。我已经定义了自己的协议,其中每条消息都是这样的:
[namespace FlatMessage; uint8 const TYPE = 50; // does not compile table String { value:string; } root_type String; ]
START_CHAR和LEN字段帮助我确定数据何时结束,之后我查找TYPE(常量偏移量为3)以确定将数据解压缩到消息类中的数据。

现在我正在研究flatbuffers,它看起来很完美,除了我不能将TYPE编码到消息中而不将其包含在实际消息中。这是我想要做的:

END_CHAR

我可以创建一个枚举,但这很麻烦。谢谢!

[编辑]我应该补充一点,我可以将协议更改为TYPE,但出于遗留原因,我需要支持 uint8_t *buf = builder.GetBufferPointer(); // I can do this with END_CHAR because I could get the buffer. auto receive_string = GetString(buf); // But I wouldn't know what the type is. e.g. this could be GetCoolString(buf). 字段。

实际上,我想我仍然需要这种类型来弄清楚如何将它反序列化为平板缓冲区。

e.g。

script{}

1 个答案:

答案 0 :(得分:1)

您可以使用以下几种选项来存储具有FlatBuffer的类型:

  • 使用类型自行添加缓冲区。
  • 使用FlatBuffers的file_identifier功能,可以识别FlatBuffer的类型。
  • 使用联合类型将类型存储在FlatBuffers中。使根表具有单个联合字段。