Как варинты занимают меньше места? - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь узнать о вариациях, и лучшее, что я нашел, это Буферы протокола Google spe c.

В своем примере они показывают, что это число 1010 1100 0000 0010, когда кодируется с помощью varints, равен 300, а не 44034.

Обычно число 300 занимает два байта (1 0010 1100), как и 300 в их примере. Как вариации на самом деле занимают меньше байтов, чем обычные?

1 Ответ

1 голос
/ 25 апреля 2020

300 обычно занимает два байта, , если вы используете 2-байтовый фиксированный формат для его представления. Если вы используете 4-байтовый или 8-байтовый формат, это займет 4 байта или 8 байтов. Если вы используете 1-байтовый формат, вы вообще не можете представить 300, если только вы не используете действительно странное кодирование.

Если вы хотите использовать кодирование переменной длины, тогда стандарт Представление дополнения 2 недостаточно, потому что в нем нет информации о длине. Вы не представляете, где останавливается число . Вы можете кодировать длину по отдельности, но это увеличит ваши требования к пространству ... или вы можете использовать что-то подобное представлению protobuf varint, которое может представлять 300 в 2 байтах и включает сигнал о том, что число завершено в этот момент.

(Или вы можете использовать один из множества других кодировок. Варианты Protobuf не однозначно превосходят другие представления, даже с точки зрения используемого пространства. Всегда есть компромиссы.)

...