我正在製作一個程序,它將與引導加載程序進行通信以更新微控制器的固件。除了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? –