Можно ли так реализовать "слово" в LZW?

Я пытаюсь реализовать алгоритм LZW сжатия на c. Символы у меня кодируются 12 битами. Словарь по задумке состоит из двух массивов

unsigned int * dictionaryCodes = malloc ((uint*) 4096 * sizeof(uint));
unsigned char * prefixes = malloc ((unsigned char*) 4096 * sizeof(unsigned char));

и есть еще один массив "слово".

unsigned char * word = malloc ((unsigned char*) 4096 * sizeof(unsigned char));

Я хочу проверять совпадение в словаре как-то типа:

 while ((ch = getc(output)) !=EOF){ // пока не конец файла
 int prefix = NULL; // код префикса 

 if (prefix == NULL){ // если читаем первый раз 
        prefix = ch; 
        continue;
    } 
 int pointer = prefix; // Указатель в таблице кодов
 word += (char) prefix; // добавляем к строке символ
 while (1){
 // если слово не совпадает с уже зафиксированными префиксами
 if(word[pointer] != prefixes[pointer]){
 // в выходной файл код самого длинного префикса
 fputc(dictionaryCodes[prefix], output);
 // обновляем слово
 word = (char) ch;
 // префикс
 prefix = ch;
 и сбрасываем указатель на первое слово, состоящее не из одной буквы
 pointer =256;
 // Выходим из бесконечного цикла, читаем следующий символ из входного потока
 break;

 }
 }

Помогите реализовать алгоритм проверки совпадения слова и строки словаря, я думаю, что где-то ошибся. В частности смущает

word += (char) prefix;

Можно ли так формировать слово? Если нужно, я опубликую весь код, который пока есть.


Ответы (0 шт):