Во-первых, вы можете использовать побитовые операции для считывания переменного байта (не кратного 8) из байтового массива.
Во-вторых, если код является действительным Код префикса , что удовлетворяет
there is no valid code word in the system that is a prefix (start) of any other valid code word in the set
, тогда вы можете определить, где заканчивается код, сравнив префикс с таблицей.
Обычно это делается следующим образом:
- Предположим, длина кода составляет от 1 до 16 бит.
- Загрузить следующие 16 бит из файла в переменную.
- Сравните 16-битную переменную стаблица, которая содержит следующие значения.Можно использовать бинарный или радикальный поиск.
- Ключ: код Шеннона-Фано или Хаффмана, сдвинутый так, что старший бит находится в старшем значащем бите.
- KeyLength: фактическое количество бит в коде Шеннона-Фано или Хаффмана.Это позволяет нам вычесть количество декодированных битов из переменной.
- Значение: значение, в которое будет декодирован код.
- Вычесть (удалить) декодированные битыот переменной в зависимости от кода.Например, если код имеет 9 битов, мы удалим 9 бит из MSB и оставим 7 битов.
- Считаем следующие 9 бит из файла, соединив их с 7 некодированными битами.
- Повторите процесс.