我有以下形式的消息:
message OuterMessage {
repeated InnerMessage msg = 1;
}
我想通过附加已经编码的 InnerMessage 实例来组成 OuterMessage 的实例。有没有一种合法的方法可以用 nanopbs 做到这一点?
我有以下形式的消息:
message OuterMessage {
repeated InnerMessage msg = 1;
}
我想通过附加已经编码的 InnerMessage 实例来组成 OuterMessage 的实例。有没有一种合法的方法可以用 nanopbs 做到这一点?
有几种方法:
pb_encode_tag_for_field()
通过调用和手动编码外部消息pb_encode_string()
。在 protobuf 中,子消息等同于有线格式的字符串。
对重复字段使用回调。在回调中,您可以执行与上述 1. 相同的操作,但还可以自动编码外部消息中的任何其他字段。
仅将标头(标签和长度)编码到单独的缓冲区,发送它,然后发送您已经编码的消息。这避免了复制数据。
在子消息字段上设置选项(nanopb).type_override = TYPE_BYTES
,以生成它,就好像它是一个bytes
字段一样。然后你可以在里面设置编码的内容。但是这种方法效率很低,因为它会导致多次复制消息数据。