欢迎来到天天文库
浏览记录
ID:24734722
大小:55.50 KB
页数:4页
时间:2018-11-14
《计算法简单实现crc校验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算法简单实现crc校验-------------------0100101001110101<-16bCRC仿此,可推出两个字节数据计算如下:d为数据,p为项式,a为余数dddddddddddddddd0000000000000000<-数据D(D1,D0,0,0)pppppppppppppppp<-多项式P-----------------------------------...aaaaaaaaaaaaaaaa0<-第一次的余数A’(A’1,A’0)ppppppppppp
2、ppppp--------------------------...aaaaaaaaaaaaaaaa<-结果A(A1,A0)由此与一字节的情况比较,将两个字节分开计算如下:先算高字节:dddddddd000000000000000000000000<-D1,0,0,0pppppppppppppppp<-P-------------------------)的返回值是与d一一对应的,总数为256项,将这些数据预先算出保存在表里,f(d)就转换为一个查表的过程,速度也就可以大幅提高,这也
3、就是查表法计算CRC的原理。再来看CRC表是如何计算出来的,即函数f(d)的实现方法。分析前面一个字节数据的计算过程可发现,d对结果的影响只表现为对P的移位异或,看计算过程中的三个8位的列中只低两个字节的最后结果是余数,而数据所在的高8位列最后都被消去了,因其中的运算均为异或,不产生进位或借位,故每一位数据只影响本列的结果,即d并不100001//P-------------------0100101001110101现在的问题就是如何根据d来对P移位异或了,从上面的例子看,也可以理解为每步移位,但根
4、据d决定中间余数是否与P异或。从前面原来的例子可以看出,决定的条件是中间余数的最高位为0,因为P的最高位一定为1,即当中间余数与d相应位异或的最高位为1时,中间余数移位就要和P异或,否则只需移位即可。其方法如下例(上例的变形,注意其中空格的移动表现了d的影响如何被排除在结果之外):d--------a--------10000000000000000<-HSB=10000000000000000<-a<<=10001000000100001<-不含最高位的1-------
5、----------1000100000010000100100000010000100001000000100001-----------------00011000001100011<-HSB=00110000011000110-----------------10110000011000110<-HSB=111000001100011000001000000100001-----------------11101000110101101<-HSB=010100011010110
6、10-----------------01010001101011010<-HSB=101000110101101000001000000100001-----------------00101011010010101<-HSB=01010110100101010-----------------01010110100101010<-HSB=101011010010101000001000000100001-----------------0100101001110101<-C
7、RC结合这些,前面的程序就好理解了。
此文档下载收益归作者所有