Re: Вопрос: Bit pack метод


Сайт о сжатии >> Форум #Компрессор# >> [Ответить] [Ответы]

Автор: зак, <zaq@pochtamt.ru>
Вильнюс, Литва, 26 ноября 2003 года в 06:32:45

В ответ на : Re: Вопрос: Bit pack метод от Sashka Maslukov в 17 ноября 2003 года в 11:55:20:


Прошу прощения за долгое отсутствие, я слегка отвлекся.

Итак, БитПэк. Опишу подробнее алгоритм, вдруг кому-нибудь пригодится.

Считаем колличество разных символов, и записываем его в файл как первый параметр. Также записываем и азбуку найденных символов. Это будет наш хедер. Далее кодируем исходный текст, последовательно складывая полученное, допустим во временный буфер. Каким образом кодируем? Относительно местонахождения символа в хедере. Т.е., если символ находится на первом (разумеется, после первого параметра==длинне азбуки) месте, то его код будет 1, если на втором - 10, третьем - 11, четвертом - 100, пятом - 101, итд. Разумеется, к коду символа следует добать какое-то колличество нулей слева, так образом, чтобы его(кода) длинна соответствовала вычесленной ранее велечине битов, необходимой для кодировки одного символа. С кодировкой все. Далее может возникнуть проблема окончания, или как там. Другими словами, в конце файла нам нужно заполнить до конца биты последнего байта. Предлагаю это сделать следующим образом. Вычисляем число лишних битов, пусть равное х. Если оно >=3, тогда дополняем байт на х-3 нуля, а в последние три бита записываем число неиспользуемых битов.
В противном случае(<3), дополняем последний байт х+5 нулями, и конечно же в оставшиеся 3 бита записываем число неиспользуемых(добавленных) символов.
Все.
Принцип декодеровки очевиден.

Всем спасибо, в частности, Sashka Maslukov'у.
Счастливо.

зак. :)

Ответы:



Ответить на это сообщение

Тема:

Имя (желательно полное):

E-Mail:

URL:

Город:

Страна:

Вежливый и подробный комментарий:
(Форматируйте его, пожалуйста, как почту - короткими строками
Еnter в конце строки, пустая строка между параграфами).

Пожалуйста, заполните все поля.
И не нажимайте по два раза на кнопку! Дождитесь ответа сервера.