Двоичное хранение чисел с переполнением битшоу в формате называется?

Для формата сериализации/протокола я должен кодировать беззнаковые числа вплоть до беззнакового 64-битного целого числа компактным способом, который должен быть простым в реализации (это означает, что я не ищу специальный алгоритм сжатия). Я думал о следующем:

if n<128  
    take bits 0..6 for representing n, set overflow bit 7 to 0
    store one byte
if n>=128 and n<16384
    take bits 0..6 of byte 1 as bits 0..6 of n, set overflow bit 7 of byte 1 to 1
    take bits 0..6 of byte 2 as bits 7..13 of n, set overflow bit 7 of byte 2 to 0
    store byte 1 followed by byte 2
 if n>=16384 and n<2^21
    ...set overflow bit 7 of byte 2 to 1... (and so on)

У меня есть два вопроса по этому поводу:

  1. Как называется этот формат? Где посмотреть реализации?

  2. Это для двоичного протокола, который будет отправляться через сокеты, где очень часто будут отправляться небольшие числа ‹128. Как вы думаете, стоит ли дополнительная обработка?


person user601395    schedule 03.02.2011    source источник


Ответы (2)


Не то же самое, но похоже на UTF-8.

Изменить

Кстати: попробуйте выбрать известный протокол. UTF-8, кодировка Хаффмана...

person cadrian    schedule 03.02.2011
comment
Спасибо за быстрый ответ. Конечно, я хочу использовать известный протокол, поэтому и спрашиваю. Я знаю о сходстве с UTF8, но это для чисел. Использование байтового формата с 7 битами для кодирования и 1 битом переполнения довольно естественно, и я считаю маловероятным, что я только что изобрел его. Никто не видел этого раньше? - person user601395; 03.02.2011

Хорошо, после еще нескольких исследований я наконец нашел его. Это называется «количество переменной длины» и используется в MIDI и ASN.1 (см. Запись в Википедии)

Чтобы ответить на мой другой вопрос, я склонен полагать, что это не стоит накладных расходов на обработку, но я все еще размышляю об этом.

person user601395    schedule 03.02.2011