2

我有以下形式的消息:

message OuterMessage {
  repeated InnerMessage msg = 1;
}

我想通过附加已经编码的 InnerMessage 实例来组成 OuterMessage 的实例。有没有一种合法的方法可以用 nanopbs 做到这一点?

4

1 回答 1

0

有几种方法:

  1. pb_encode_tag_for_field()通过调用和手动编码外部消息pb_encode_string()。在 protobuf 中,子消息等同于有线格式的字符串。

  2. 对重复字段使用回调。在回调中,您可以执行与上述 1. 相同的操作,但还可以自动编码外部消息中的任何其他字段。

  3. 仅将标头(标签和长度)编码到单独的缓冲区,发送它,然后发送您已经编码的消息。这避免了复制数据。

  4. 在子消息字段上设置选项(nanopb).type_override = TYPE_BYTES,以生成它,就好像它是一个bytes字段一样。然后你可以在里面设置编码的内容。但是这种方法效率很低,因为它会导致多次复制消息数据。

于 2022-02-24T06:49:10.940 回答