2013-07-22 1 views
10

Я не могу найти, возможно ли иметь символ/байтовый тип в прото.Есть один-байтовый тип в protobuf?

я могу увидеть различные типы здесь:

, но я не могу найти тип байт и даже Int16 типов там.

+6

Нефиксированные целочисленные типы используют кодирование с переменной длиной, поэтому предположительно вы будете использовать 'int32' для 16-битных и 8-битных целых чисел, и пусть часть кодирования переменной длины позаботится о том, чтобы не отправлять байты, которые вы не используете , –

+0

@muistooshort IMHO ваш комментарий должен быть принят. – omikron

ответ

18

Нет, фиксированного 1-байтового типа нет. Фиксированная длина имеет только 4 и 8 байтов. Большинство других числовых значений кодируются как «varint» s, которые являются переменной длиной в зависимости от величины (и знака, но там играет «зигзаг»). Таким образом, вы можете хранить байты со значением 0-127 в одном байте и 128-255 в двух байтах. 16-разрядные значения будут занимать от 1 до 3 байтов в зависимости от величины (и знака/зигзага и т. Д.).

Для краткости имеется «байты» для 8-разрядной версии и «упакованы» для остальных; это позволяет избежать затрат на заголовок поля на значение.

Смежные вопросы