CRC-16(循环系统沉余不正确校检)
沉余循环码(CRC)包括2个字节数,即16位二进制。CRC码由推送机器设备计算,置放于发送短信的尾端。接受信息内容的装备再再次计算接受到信息的CRC码,较为计算获得的CRC码是不是与接受到的相符合,假如二者不相符合,则说明错误。
在开展CRC码计算时仅用8位数据位。起止位,终止位,奇偶校验位也不参加CRC码计算。
计算CRC码的流程为:
① 预设16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器。
② 把第一个8位数据信息与16位CRC寄存器的低位相异或运算,把結果放在CRC寄存器。
③ 把寄存器的內容右移一位,用0弥补最大位,查验最低位。
④ 假如最低位为0:反复第3步,再度右移一位;假如最低位为1:CRC寄存器与代数式A001(1010 0000 0000 0001)开展异或运算。
⑤ 反复流程③和④,直至右移8次,那样全部8位数据信息所有通过了解决。
⑥ 反复流程②到⑤,开展下一个8位数据信息的解决。
⑦ 最终获得的CRC寄存器的值即是CRC码。
⑧ 将CRC码分为高8位和低8位,按低位在先,上位后面,将他们加到传输数据以后。
立即法转化成编码:
unsigned short crc_16(unsigned char *Array, unsigned char *Rcvbuf,unsigned int Len)
{
unsigned int IX,IY,CRC;
CRC=0xFFFF;//set all 1
if (Len=0)
CRC = 0;
else
{
Len--;
for (IX=0;IX=Len;IX )
{
CRC=CRC^(unsigned int)(Array[IX]);
for(IY=0;IY=7;IY )
{
if ((CRC1)!=0 )
CRC=(CRC1)^0xA001;
else
CRC=CRC1; //
}
}
}
Rcvbuf[0] = (CRC 0xff00)8;//高部位
Rcvbuf[1] = (CRC 0x00ff); //低位置
CRC= Rcvbuf[0]8;
CRC = Rcvbuf[1];
return CRC;
}