CRC检验函数
前段时间一直在使用CRC校验函数,现在将函数内容总结:
typedef unsigned short uint16_t
typedef unsigned char uint8_t
typedef unsigned int uint32_t
uint16_t checkCRC(uint8_t *pData, uint32_t plen)
{
if (NULL == pData || plen <= 0)
{
return 0;
}
uint16_t u16CRC = 0xFFFF;
for (int i = 0; i < plen; i++)
{
u16CRC ^= (uint16_t)(pData[i]);
for(int j = 0; j <= 7; j++)
{
if (u16CRC & 0x0001)
{
u16CRC = (u16CRC >> 1) ^ 0xA001;
}
else
{
u16CRC = u16CRC >> 1;
}
}
}
uint16_t siRet = 0;
siRet = (u16CRC & 0x00FF) << 8;
siRet |= u16CRC >> 8;
return siRet;
}