Пытаясь понять и реализовать алгоритм сжатия - PullRequest
0 голосов
/ 04 октября 2019

Чтение этого ответа на стек-поток:

Вам просто нужна простая процедура, которая записывает произвольное количество бит в поток байтов. Он просто сохраняет однобайтовый буфер, в который вы помещаете биты, пока у вас не будет восьми битов. Затем запишите байты, очистите буфер и начните все сначала. Процесс перевернут с другой стороны. Когда вы дойдете до конца, просто запишите последний байтовый буфер, если он не пустой, с остальными битами, установленными в ноль.

Вам нужно только выяснить, сколько бит требуется для каждого символа в текущем состояниисжатия. То же самое определение может быть сделано с другой стороны при извлечении битов из потока.

Я сейчас работаю над алгоритмом LZW, и в этой части выше я не понимаю, как это сделать. У меня есть базовый код, и он работает, но сейчас я пытаюсь реализовать то, что говорит ответ. Во-первых, для буфера написано, что когда у меня в буфере 8 бит или (12 бит), давайте пока перейдем к 12-битному буферу из 3 байтов, потому что 12 бит позволяют больше комбинаций в моем словаре. Я запишу байт в файл, но все мои коды в 7 битах: например, L - это код 76 в ascii, а 76 преобразуется в 1001100 в двоичном (7 бит). В этом случае я добавлю 0 вначиная, пока я не получу 12 бит? И затем идет второй байт моего буфера, где я не понимаю, что делать с :( Я провел исследование по сдвигу битов, но я не понимаю, как это может быть полезно здесь. Спасибо

...