上传者: sub7v21
|
上传时间: 2022-01-04 20:38:35
|
文件大小: 43KB
|
文件类型: -
遇到要做个CRC校验,翻了一堆资料终于看明白了,内有详细注释,不是普通的词典法,是用算法计算出来的CRC,对于CRC16-CCITT,只需替换公式即可
/* CRC16实现原理
*
* CRC16 | g(x)=x16+x15+x2+1 | 0x1,80,05 | 1,1000,0000,0000,0101
*
* 由于在步骤进行了取反,这里也要把公式反过来
* 0x8005 1000000000000101
* 0xA001 1010000000000001
*
* 1.置16位CRC寄存器CRCFull全为1
* 2.数据message[i]一个字节8位与CRCFull异或,结果存在CRCFull(作用是取反)
* 3.CRCFull最低位存在CRCLSB,CRCFull右移一位(向低位),用0填补最高位
* 4.检查原最低位即CRCLSB:
* 1:CRCFull与多项式0xA001异或
* 0:重复步骤
* 5.重复步骤和,直到右移8次,处理完整个message[i]字节
* 6.重复步骤到,进行下一个字节8位数据的处理,直到(message.Length)
* 7.最后得到的CRC寄存器CRCFull即为此数据的CRC16码
*
*
*
*/