参考资料推荐
[原创]CRC技术的实现与破解(10.21更新)-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com (通俗解释)
CRC校验码原理、实例、手动计算 - 步孤天 - 博客园(解释移位原理)
https://blog.csdn.net/mish84/article/details/27528125(解释代码)
//CRC16实现代码
uint16_t CrcSum(uint8_t *ptr, uint16_t len)
{
uint8_t i;
uint16_t crc=0;
while(len-- != 0)
{
for(i=0x80; i!=0; i/=2)
{
if((crc & 0x8000)!=0)
{
crc*=2; //左移1位
crc^=0x1021;
} /* 余式CRC乘以2再求CRC */
else
{
crc*=2;
}
if((*ptr&i)!=0)
{
crc^=0x1021;
}/* 再加上本位的CRC */
}
ptr++;
}
return (crc);
}