#python #c #protocol-buffers
#python #c #протокол-буферы
Вопрос:
Из документации
По историческим причинам повторяющиеся поля базовых числовых типов кодируются не так эффективно, как могли бы быть. Новый код должен использовать специальную опцию [packed = true], чтобы получить более эффективную кодировку
но похоже, что если бы я использовал повторяющиеся типы, такие как
repeated int
repeated float
когда я не указываю
[packed=true]
Сообщение из C в python всегда возвращается
DecodeError: Truncated message
Есть ли для этого конкретная причина?
Спасибо
Комментарии:
1. Вероятно, в вашем коде есть ошибка, которая искажает сообщение при передаче. Одной из распространенных ошибок является передача закодированного protobuf как
char*
без размера. Передача строки какchar*
означает, что первый байт с нулевым значением будет считаться концом строки, но объекты protobuf могут содержать байты с нулевым значением до конца. Таким образом, ваше сообщение в конечном итоге будет усечено. Однако, не видя вашего кода, трудно сказать, является ли это проблемой, с которой вы столкнулись.2. Я вижу, я также подозреваю, что в базе кода, на которую я смотрю, есть некоторые ошибки, я снова просмотрю код, чтобы посмотреть, найду ли я что-нибудь подозрительное, спасибо