参考了 C知道 给的代码,为了方便自己做校验,就添加了高低位互换的代码,让校验更方便一点。
#include <stdio.h>
unsigned int CRC16(unsigned char *buf,unsigned char len)
{
unsigned short crc = 0xFFFF;
int i,j;
for(i=0;i<len; i++)
{
crc ^= buf[i];
for(j=0;j< 8;j++)
{
if (crc & 0x0001)
{
crc>>= 1;
crc ^= 0xA001;
}
else
{
crc >>= 1;
}
}
}
crc=( (crc<<8)+(crc>>8) ) & 0xffff;//高低位交换
return crc;
}
注意事项:
我在校验的时候忽略了数组的长度和数组标号,以至于一开始没出结果,后来才发现是由于把长度和下标混用了。