Nanopb получить строку из pb_ostream_t
Я использую nanopb, поэтому я могу реализовать protobuf с небольшим кросс-скомпилированным кодом. У меня есть база, которая работает, но я хотел бы получить закодированное сообщение protobuf в виде строки для отправки по UDP (в другой системе). Обычно с полноценной библиотекой protobuf вы делаете что-то вроде message.serializeToString()
, Nanopb, кажется, не имеет этого, но, безусловно, это обычное дело. Примеры, приведенные в nanopb, используют их структуру pb_ostream_t и pb_ostream_from_buffer(). Есть идеи?
1 ответ
В C двоичная строка - это просто массив uint8_t. (Обратите внимание, что обычная строка C не может содержать двоичные данные, поэтому ее нельзя использовать для хранения сообщений protobuf.)
Таким образом, pb_ostream_from_buffer() является правильным способом получения результата в виде "строки".
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
, Это строка, которую вы хотите.