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 に答える