#include "iostream.h"
/*具体CRC生成步骤请看文档*/
unsigned short CRC_16_Fun( unsigned short *data,int num)
/* data: 要进行CRC校验的数据
num: 数据的个数
CRC_Value:计算出的CRC校验码
这里的CRC校验多项式的简式为8005H*/
{unsigned short CRC_Value;
int i,j;
unsigned short Test=0x0001;
unsigned short CRC=0xA001; //CRC校验多项式的简式(把简式反过来输入,原来是8005H)
CRC_Value =0xFFFF; //CRC寄存器置一
for(i=0;i<num;i++)
{
CRC_Value=CRC_Value^data[i]; //前一字节的CRC校验值低字节与当前字节进行异或
for(j=0;j<8;j++)
{
if(CRC_Value & Test) //判断最低位是否为1
{
CRC_Value>>=1; //右移1位
CRC_Value^=CRC; //进行异或运算
}
else
{
CRC_Value>>=1; //右移1位
}
}
}
return CRC_Value;
}
void main()
{
unsigned short data[6] ={0x01,0x04,0x00,0x00,0x00,0x01}; //需要校验的数据
unsigned short crc_value1; //CRC的校验结果
crc_value1=CRC_16_Fun(data,6);
cout<<hex<<crc_value1<<endl;
}