поле буфера протокола uint32 с данными всегда в [0,255] - PullRequest
1 голос
/ 05 января 2011

В буфере протокола Google я собираюсь использовать поле для хранения значений, которые будут целыми числами в [0,255].Из http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar, похоже, что uint32 будет подходящим типом значения для использования.Несмотря на то, что поле может содержать до 32-битных целых чисел, эти дополнительные биты не будут потрачены впустую в моем случае из-за кодирования переменной длины.(Поправьте меня, если я ошибаюсь.)

Мой вопрос: как мне указать, что читатель сериализованного сообщения может предположить, что наибольшее значение в этом поле будет 255?Просто комментарий в спецификации буфера протокола?Есть ли другой способ?

1 Ответ

2 голосов
/ 05 января 2011

В .proto нет такой спецификации; Вы должны просто задокументировать это (и предположительно привести его соответствующим образом к потребляющему коду).

В сторону: если вы используете реализацию C # protobuf-net, то вы можете сделать это, работая за пределами определения .proto (protobuf-net разрешает сначала код):

[ProtoMember(3)] // <=== field number
public byte SomeValue {get;set;}

Это тогда явно ограничено 0-255, но кодируется на проводе, как вы ожидаете (например, uint32). Он также выполняет преобразование checked при десериализации, чтобы проверить правильность значений.

В .proto вышеуказанное ближе всего к:

optional uint32 someValue = 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...