Я реализую программу для сжатия / распаковки Хаффмана (ради обучения / развлечения, поэтому я не хочу использовать существующие библиотеки / программы).
Мне удалось построить сжатие три, поэтому у меня есть таблица со всеми символами и их соответствующим сжатым представлением в битах. Например:
а = 0010
б = 01101
с = 0011
д = 1101
е = 101
Теперь моя идея состоит в том, чтобы хранить биты в контейнере (например, переменную char или int) и затем выводить их в файл.
Я знаю, как упаковывать / распаковывать биты в char или int, используя побитовые операции. Однако проблема, с которой я сталкиваюсь, заключается в том, что количество бит в сжатой версии не будет соответствовать количеству битов, которые у меня есть.
Предположим, я хочу сжать строку "abc", используя таблицу выше. Я бы начал с сжатия 'a', поэтому упаковывал 0010 в переменную типа char. Затем я бы сжал 'b', но для этого нужно 5 бит, и у меня осталось только 4 бита в моей переменной char. Я мог бы использовать другую переменную, но было бы беспорядок, чтобы отслеживать, какая переменная использует сколько битов.
Использование int даст мне 32 бита для работы, но та же проблема возникнет, когда я подойду к пределу.