Я наблюдаю одну проблему, которую мне нужно решить.
Мне нужно вычислить CRC шестнадцатеричной записи (из массива) и сравнить ее с ожидаемой.У меня нет полинома.
Массив, извлеченный из контрольной суммы, выглядит следующим образом (пример):
unsigned short crcSrc[0x7FFE] = {0xB6FE, 0x8062, 0x2714, 0xB8FE, 0x8066, 0xA940, 0xA743, 0xBCF7, 0x0B87, 0x7E18, 0x070B...... };
записи извлекаются из файла, который выглядит (только начинается):
S0 5A00 0043 3A5C 4441 5445 4E5C 5072 6F6A 656B 7465 5C48 5648 5F48 3130 305F 3830 305C 4170 706C 6963 6174 696F 6E5C 506F 7273 6368 655C 4A31 5C53 6F66 7477 6172 655C 4275 696C 645C 4856 485F 506F 7273 6368 655F 4A31 2E70 726D B9S2 0600 0000 D7F2 30S2 24FE 8000 B6FE 8062 2714 B8FE 8066 A940 A743 BCF7 0B87 7E18 070B 8675 05B9 FE80 6927 10A6 B3S2 24FE 8020 F727 0CA8F71CF7E70B867D2074051B030011FF95A11B03001000BDFA001ED2207A
А что мне нужно сделать?Я получил правильный результат CRC, который равен 0xd7f2, и мне нужно написать калькулятор, чтобы получить его.Я уже нашел некоторые решения в Интернете, но у меня до сих пор нет Polynom, который необходим для решения этой проблемы.Как я могу получить это?Это скрыто где-то в этом файле?
Большое спасибо
РЕДАКТИРОВАТЬ: я публикую свой код здесь, как я рассчитываю CRC
unsigned short crc16(char *data_p, unsigned short length)
{
unsigned char i;
unsigned int data;
unsigned int crc = 0xffff;
if (length == 0)
return (~crc);
do
{
for (i=0, data=(unsigned int)0xff & *data_p++;
i < 8;
i++, data >>= 1)
{
if ((crc & 0x0001) ^ (data & 0x0001))
crc = (crc >> 1) ^ POLY;
else crc >>= 1;
}
} while (--length);
crc = ~crc;
data = crc;
crc = (crc << 8) | (data >> 8 & 0xff);
return (crc);
}
РЕДАКТИРОВАТЬ 2: Добавление всех исходных файловскачать