Веди меня в эту путаницу (Проверка файла с CRC16 в C) - PullRequest
0 голосов
/ 24 февраля 2012

здесь у меня путаница в выводе CRC16.

Здесь сначала я использовал только одну функцию, которая использует char readChar и считает CRC16 любого типа файла, но в .tar or .tar.gz файлах у меня возникли некоторые проблемы в отношении EOF и в моем предыдущем вопросе кто-то предложил мне использовать int вместо char в declartion of readChar.

Так что после этого я получил решение EOF в цикле while и его чтение в надлежащих байтах.

После этого я поставил два метода расчета CRC16.В первом я использовал int readChar, а во втором - char readChar. Так что я разобрался с тем же файлом, эту проблему я получаю только в .tar and .tar.gz файлах.В простых .txt файлах оба эти метода дают один и тот же результат.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Похоже, проблема может быть в использовании символов signed. Попробуйте явно объявить вашего персонажа как unsigned:

unsigned char readChar;

Проблема в том, что если вы читаете байт из файла с шестнадцатеричным значением (например) 0xfe, тогда значение char будет -2, а значение unsigned char будет 254. Это существенно повлияет на ваши расчеты CRC.

0 голосов
/ 24 февраля 2012

Почему вы думаете, что ваш ответ неверен? Какой вкус CRC16 вы пытаетесь рассчитать? С каким инструментом вы сравниваете свой результат?

Вы можете избавиться от версии char. getc() возвращает значение типа unsigned char внутри целого числа (или целое значение EOF), неправильно назначать его для символа.

Похоже, вы предполагаете, short с длиной 16 бит. Вы это подтвердили?

Вы должны всегда работать со всеми включенными предупреждениями компилятора. У вас есть неиспользуемые переменные, неинициализированные переменные, необъявленные функции и пропущенные параметры для вызовов функций. Я поражен, что ваша программа работает вообще; он разбился на моем компьютере.

...