一、CRC16/MODBUS
const uint16_t polynom = 0xA001;
uint16_t crc16bitbybit(uint8_t *ptr, uint16_t len)
{
uint8_t i;
uint16_t crc = 0xffff;
if (len == 0)
{
len = 1;
}
while (len--)
{
crc ^= *ptr;
for (i = 0; i<8; i++)
{
if (crc & 1)
{
crc >>= 1;
crc ^= polynom;
}
else
{
crc >>= 1;
}
}
ptr++;
}
return(crc);
}
二、和校验/异或校验
/* 异或校验 */
uint8_t CheckXOR(uint8_t *Buf,uint16_t Len)
{
uint8_t x =0;
for(int i=0; i<Len; i++)
{
x = x^(*(Buf+i));
}
return x;
}