CRC

 

对于crc16,crc32或者其他多项式的校验,只需要更改uint8_t POLYNOMIAL和uint8_t crc行的初始值即可
多项式为:100110001(简记为0x31),也就是CRC-8
将CRC寄存器(8-bits,比生成多项式少1bit)赋初值
/*
* crc8校验函数,data为要校验的数据,len为要校验的数据的字节数
*/
uint8_t crc8(const uint8_t *data, int len)
{
const uint8_t POLYNOMIAL = 0x31;//多项式
uint8_t crc = 0xFF;//初值
int i, j;

for (i=0; i<len; ++i)
{
crc ^= *data++;

for (j=0; j<8; ++j)
{
crc = ( crc & 0x80 )? (crc << 1) ^ POLYNOMIAL: (crc << 1);
}
}

return crc;
}

CCITT:多项式0x1021,余数初始值0xFFFF

CRC16:多项式0x8005,余数初始值0x0000

CRC32:多项式0x04C11DB7,余数初始值0xFFFFFFFF