Можно ли так реализовать "слово" в 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;
Можно ли так формировать слово? Если нужно, я опубликую весь код, который пока есть.