Повторяющиеся типы без упаковки = true возвращают ошибку декодирования: усеченное сообщение в protobuf

#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. Я вижу, я также подозреваю, что в базе кода, на которую я смотрю, есть некоторые ошибки, я снова просмотрю код, чтобы посмотреть, найду ли я что-нибудь подозрительное, спасибо