很多讲的都是crc16-ccitt标准一直想弄明白crc-16标

很多讲的都是crc16-ccitt标准一直想弄明白crc-16标

ID:34766094

大小:69.18 KB

页数:3页

时间:2019-03-10

很多讲的都是crc16-ccitt标准一直想弄明白crc-16标_第1页
很多讲的都是crc16-ccitt标准一直想弄明白crc-16标_第2页
很多讲的都是crc16-ccitt标准一直想弄明白crc-16标_第3页
资源描述:

《很多讲的都是crc16-ccitt标准一直想弄明白crc-16标》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、最近在搞CRC校验,用的是CRC16标准,查看了很多资料发现很多讲的都是CRC16-CCITT标准,一直想弄明白CRC-16标准中的采用查表法的方式中那两个表格中的数是如何求出来的。可惜没有一个文章仔细的讲,更没有文章给出实例来算一算。一切只能靠自己了,谁让我喜欢寻根摸底呢。研究了一下本站会员玉丫子的文章,自己琢磨了琢磨,终于知道是怎么算出来的了。CRC16算法的生成多项式x^16+x^15+x^2+1,十六进制表示为0x8005。CRC16常见的表格中的数据是按照先传输LSB,消息右移进寄存器来计算的。因此需要判断寄存器的最低位LSB,同时要将0x8005按位颠倒后(0xA001)根据L

2、SB的情况决定是否与寄存器异或即可。CRC16的表格中对应的数依次为0~255计算出来的CRC值,因此,此处只选取其中一两个数作为实例计算CRC值。具体步骤如下所示:1)从0~255中选取需要计算的数,将其对应的十六进制数放入一个长度为16的寄存器的低八位,高八位填充0;  2)如果寄存器的末位LSB为1,将寄存器的数值右移1位,再与0xA001位异或,否则仅将寄存器右移1位;  3)重复第2步,直到低八位全部右移出寄存器;  4)寄存器中的值则为校验码。从0~255中挑选2(对应0x02)计算其CRC值:0x02的CRC-16的表格计算(反向)0000000000000010 <- 最低

3、位LSB = 0,高八位填充0      00000000000000010 右移,高位填充0,并舍弃最后一位      -----------------第一次计算     0000000000000001<- LSB = 100000000000000001右移,舍弃最后一位     ^10100000 00000001 <-与0xA001异或      -----------------第二次     1010000000000001 <- LSB = 1      01010000000000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或   

4、   -----------------第三次     1111000000000001 <- LSB = 1      01111000000000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或      -----------------第四次     1101100000000001 <- LSB = 1      01101100000000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或      -----------------第五次     1100110000000001 <- LSB = 1   

5、   01100110000000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或      -----------------第六次     1100011000000001 <- LSB = 1      01100011000000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或      -----------------第七次   1100001100000001 <- LSB = 1      01100001100000001右移,舍弃最后一位^10100000 00000001 <-与0xA001异或 

6、     -----------------一共右移了八次,得到的结果为CRC      1100000110000001 <- CRC:0xC181从本文最后的附表中可以看出auchCRCHi[]的第三个值就是0x81,auchCRCLo[]的第三个值就是0xC1,可见计算无误。另一个计算实例,从0~255中挑选11(对应0x0B)计算其CRC值:0x0B的CRC-16的表格计算(反向)0000000000001011 <- 最低位LSB = 1,高八位填充0      00000000000001011 右移,高位填充0,并舍弃最后一位^10100000 00000001 <-与0xA

7、001异或      -----------------第一次计算     1010000000000100<- LSB = 001010000000000100右移,舍弃最后一位      -----------------第二次     0101000000000010 <- LSB = 0      00101000000000010右移,舍弃最后一位-----------------第三次     0010100

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。