我正在制作一个程序,它将与引导加载程序进行通信以更新微控制器的固件。除了CRC calculation
以外,一切都准备就绪。CRC16-CCITT不正确的结果?
我已经使用来自here的CRC计算函数来计算多项式为x16 + x12 + x5 + 1
(0b10001000000100001)的CRC16。
但输入0x3304000
的结果出来是错误的。我检查了这个website。此外,我有一个python脚本,我复制C
复查。 python脚本正确计算了CRC
。
下面是从网站的代码:
uint16_t crc16(uint8_t *data_p, unsigned 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);
}
我会责怪排序。 –
我正在传递'uint8_t'数组。我认为endianess不应该是一个问题。 – abhiarora
您如何知道网站正在使用CRC16-CCITT? –