Двоичное интегральное сжатие данных - PullRequest
4 голосов
/ 14 июня 2011

Мне нужно передавать целые типы данных по сети, но я не хочу передавать все 32 (или 64) бита все время - данные помещаются в один байт в 99% времени - так что, похоже, нужно сжатьэто как-то так: например, первый бит байта равен 0, если остальные 7 битов означают только некоторое значение (0-127), в противном случае (если первый байт равен 1), необходимо сдвинуть эти 7 байтов влево и прочитать второй байт, чтобы сделать то же самоеprocess.

Есть ли какой-нибудь общий способ сделать это?Я не хочу изобретать велосипед ...

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Схема, которую вы описываете (которая, по сути, является кодировкой base-128: каждый байт является 7-битной "цифрой" base-128 и единичным битовым флагом, чтобы указать, является ли он последней цифрой) распространенный способ сделать это.

Например, см.

0 голосов
/ 14 июня 2011

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

...