Что это за целочисленное кодирование переменной длины?
Я документирую старый формат файла и поставил себя в тупик со следующей проблемой.
Кажется, что целые числа кодируются с переменной длиной, с числами <= 0x7F
закодирован одним байтом, но>= 0x80
закодированы в два байта. Пример набора целых чисел и их закодированных аналогов:
0x390
кодируется как0x9007
0x150
кодируется как0xD002
0x82
кодируется как0x8201
0x89
кодируется как0x8901
Я еще не сталкивался с числами, которые больше, чем 0xFFFF
, поэтому я не могу быть уверен, если / как они закодированы. Для жизни я не могу выработать здесь схему. Есть идеи?
1 ответ
На первый взгляд кажется, что числа разбиты на 7-битные порции, каждый из которых закодирован как 7 младших битов выходного байта, в то время как старший бит указывает, есть ли еще байты, следующие за этим (то есть последний байт закодированного целого числа имеет 0 как его MSB).
Наименее значимые биты входных данных идут первыми, поэтому, я думаю, вы могли бы назвать это "little endian".
Изменить: см. https://en.wikipedia.org/wiki/Variable-length_quantity (используется в буферах протоколов MIDI и Google)