#define POLY 0x1021
/**
*CITT标准的CRC16计算
*addr:待计算数据的起始地址
*num:待计算数据长度(字节数)
*返回值:16位校验值
**/
uint16_t crc16(uint8_t *addr, uint32_t num)
{
int i;
uint16_t crc = 0xFFFF;
for (; num > 0; num--)
{
crc = crc ^ (*addr++ << 8);
for (i = 0; i < 8; i++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ POLY;
else
crc <<= 1;
}
crc &= 0xFFFF;
}
return(crc);
}
CCITT标准的CRC16计算
回复