Согласно веб-сайту ниже, CRC16 / CCITT_FALSE не соответствует вашему коду. Веб-сайт указывает, что это CRC со сдвигом влево (неотраженный), в то время как ваш код сдвигается вправо.
CRC16 / X25 является CRC со сдвигом вправо (отраженный) и возвращает ~ CRC (CRC xor 0xFFFF). Я не знаю, совпадает ли это с CRC16 / CCITT_X25.
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
Вы можете использовать веб-сайт, чтобы сравнить свои результаты с его результатами.
IНачал с простого примера создания двух функций crc16:
uint16_t crc16_ccitt_false(char* pData, int length)
{
int i;
uint16_t wCrc = 0xffff;
while (length--) {
wCrc ^= *(unsigned char *)pData++ << 8;
for (i=0; i < 8; i++)
wCrc = wCrc & 0x8000 ? (wCrc << 1) ^ 0x1021 : wCrc << 1;
}
return wCrc;
}
uint16_t crc16_x25(char* pData, int length)
{
int i;
uint16_t wCrc = 0xffff;
while (length--) {
wCrc ^= *(unsigned char *)pData++ << 0;
for (i=0; i < 8; i++)
wCrc = wCrc & 0x0001 ? (wCrc >> 1) ^ 0x8408 : wCrc >> 1;
}
return wCrc ^ 0xffff;
}