Дополнительный байт(ы) после кодирования/декодирования

В настоящее время я пишу программу для кодирования и декодирования сообщений с помощью циклических кодов с исправлением ошибок. Мой алгоритм отлично работает для одиночных сообщений, но у меня возникли проблемы с декодированием строк. Кодирование и декодирование работают следующим образом:

  1. Алгоритм кодирования получает K бит и в результате возвращает N бит.
  2. Алгоритм декодирования получает N бит и в результате возвращает K бит.

Например, я хочу закодировать и декодировать строку. Я преобразовываю строку в массив байтов и читаю ее по крупицам, пока не будет прочитан бит K. Затем я кодирую этот K бит и записываю все N полученные биты побитно в массив байтов. И так далее. Декодирование такое же, но я декодирую N бит и записываю K бит за битом в массив байтов. Есть пример моей проблемы.

Если K = 9 (каждая строка имеет длину K, чтобы визуализировать мою проблему)

0][11100000]
00][0011101
010][111000
0000][00111
11010][1110
111010][001
0111010][11
________[0< бр>

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

[00000000][0

И я не знаю, как определить этот лишний байт. Может быть, этот нулевой байт был там до кодирования. Не могли бы вы дать мне несколько советов, что мне делать с моей проблемой. Может быть, я должен изменить свой алгоритм (может быть, я не должен читать его по частям). Я буду признателен за любую помощь. Спасибо.


person Mo3r    schedule 02.05.2012    source источник


Ответы (2)


Алгоритмы кодирования, основанные на последовательностях битов переменной длины, достаточно распространены в «природе». Ознакомьтесь с решениями для побитового ввода-вывода в Rosetta Code, они могут дать вам некоторое представление.

person mloskot    schedule 02.05.2012

Я решил заполнить этот пробел байтом 0xFF. Я использую кодировку UTF8, и она не может иметь байты 0xFF, поэтому я удаляю все байты 0xFF в конце сообщения после декодирования.

person Mo3r    schedule 09.05.2012