nanopbを使用しているので、小さなクロス コンパイル コードで protobuf を実装できます。私はそれが機能する基盤を持っていますが、エンコードされたprotobufメッセージをUDP経由で(別のシステムで)送信するための文字列として取得したいと考えています。通常、本格的な protobuf ライブラリでは、次のようなことを行いますmessage.serializeToString()
。Nanopb にはそれがないように見えますが、確かによくあることです。nanopb から提供された例では、pb_ostream_t 構造体とpb_ostream_from_buffer()を使用しています。
質問する
2886 次
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 に答える