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() является правильным способом получения результата в виде "строки".

Взяв пример из 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, Это строка, которую вы хотите.

Другие вопросы по тегам