Здесь есть две проблемы
1) protobuf использует кодировку varint для целых чисел, поэтому размер зависит от значения, см. эту ссылку
2) нулевое значениеполя не передаются по умолчанию, поэтому, поскольку два целых числа равны нулю, даже их идентификаторы полей не отправляются.Я на самом деле не уверен, что есть даже возможность отправить нулевые значения, глядя на документы
, если вы установите их оба на 1, у вас будет больше нуля байтов, но он все равно выиграетне может быть фиксированной длины, в зависимости от диапазона значений
, поэтому нет реального способа обеспечить фиксированный размер в сообщениях protobuf в целом
, если вы хотите сообщения фиксированной длины, вы, вероятно,Лучше использовать прямое кодирование типа Structs-on-the-Wire, но тогда для языкового взаимодействия сложнее, так как им всем придется определять одно и то же сообщение, и вы потеряете простую миграцию сообщений и все классные вещи, которые дает protobuf.
Cap'n Proto может иметь опцию для структур фиксированного размера, но они также обычно сжимаются, что, опять же, приводит к сообщениям переменной длины.
Если вы опишитепроблему, которую вы пытаетесь решить, мы можем предложить другие варианты.