1

我正在使用nanopb,所以我可以使用一些小的交叉编译代码来实现 protobuf。我有它工作的基础,但希望将编码的 protobuf 消息作为字符串通过 UDP(在另一个系统上)发送。通常使用完整的 protobuf 库,您可以执行类似message.serializeToString(). Nanopb 似乎没有,但肯定是很常见的事情。nanopb 给出的示例使用他们的 pb_ostream_t 结构和pb_ostream_from_buffer() 有什么想法吗?

4

1 回答 1

1

在 C 中,二进制字符串只是一个 uint8_t 数组。(请注意,普通的 C 字符串不能包含二进制数据,因此不能用于存储 protobuf 消息。)

因此 pb_ostream_from_buffer() 是将结果作为“字符串”的正确方法。

取自simple.c 示例

uint8_t buffer[128];
pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
status = pb_encode(&stream, SimpleMessage_fields, &message);

之后,编码的消息进入buffer并且长度为stream.bytes_written. 那就是你想要的字符串。

于 2015-07-08T07:52:03.687 回答