crc16、crc32校验简单分析

crc16、crc32校验简单分析

ID:14661664

大小:1.79 MB

页数:4页

时间:2018-07-29

crc16、crc32校验简单分析_第1页
crc16、crc32校验简单分析_第2页
crc16、crc32校验简单分析_第3页
crc16、crc32校验简单分析_第4页
资源描述:

《crc16、crc32校验简单分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、CRC16校验分析工业通讯中传输的数据一般是先传数据字节的低位,如:实际DATA0x38(00111000)à接收端收到为00011100(0x1C),所以大部分CRC校验是处理颠倒的字节数据。有的多项式简式为0x1021(本文以0x8005为主),目前主要的CRC算法有查表法和直接计算:1.直接计算由于数据是颠倒的所以生成项亦要倒置:0xa001(原生成多项式CRC码为0x18005,最高位始终为1故简写为0x8005,反置得到0xa001。计算CRC时也要从其低位开始运算,且计算中数据右移(

2、移出高位)。异或运算满足交换律:(A^B)^C=A^(B^C),下面分析其中一种简单算法:C语言计算:计算时一次计算8bits,数据与CRC生成多项式(简式)相除,除不尽的余数与下8bits数据再异或(相减),接着进入下一8bits计算。直到len长的数据全部计算完。2.查表法:通过分别计算8bits(查表得到其余式)来实现逐个字节数据的CRC计算,直到全部字节数据计算完最后的余式就是CRC。下面全是8bits查询表(256个余式的表),不过也可以4bits查询一次的计算(这样表里只需16个余式

3、).先看程序的算法:数据计算示意图:若待测数据未扩展0,则此时还要计算4字节扩展0的CRC:构造CRC32查询表:一般来说,计算CRC是用“直驱表法”算法计算的,它与上面的算法非常相似,下面分析它的计算:计算步骤为(摘自文献):1.Shifttheregisterleftbyonebyte2.XORthetopbytejustrotatedoutoftheregisterwiththenextmessagebytetoyieldanindexintothetable([0,255]).3.XOR

4、thetablevalueintotheregister.4.Goto1iffmoreaugmentedmessagebytes.C语言算法为:r=0;//r是寄存器,先初始化为0while(len--)//len是待测数据(不用扩展0)的字节长度r=(r<<8)^t[(r>>24)^*p++];//p是指向待测数据的指针,t是查询表相当于通过移位处理了8个bit的数据,相当于把之前的CRC码的高字节(8bit)全部移出,与一个byte的数据做XOR运算,根据运算结果来选择一个值(称为余式),与

5、原来的CRC码再做一次XOR运算,就可以得到新的CRC码。p指向Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ……字节数据,r为CRC32余式值,t为查询表。实际上收到的数据一般是先收数据的低位,最后收到字节数据的高位,这样将数据反置了,于是算法只需稍作更改也可算出:1.将寄存器向右移动一个字节。2.将刚移出的那个字节与待测数据中的新字节做XOR运算,得到一个指向查询表的索引值。3.将索引所指的表值与寄存器做XOR运算。4.如数据没有全部处理完,则跳到步骤1。算法为:r=0;//r是寄存器,先初始化为0for(i=0;

6、i>8);//p是指向待测数据的指针,t是查询表}注意此时的查询表不再是前文那个查询表了,它也是一个颠倒的查询表:

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

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

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