CRC循环crc16校验工具问题

下次自动登录
现在的位置:
& 综合 & 正文
CRC(循环冗余校验算)算法原理解析
曾在网上找了很多资料,但一些细节都没有说,导致自己计算结果和一些CRC软件计算结果不一样。于是用了2天的时间,研究了以下CRC,在此记录以下。希望能给对此有疑惑的朋友一些帮助,如有问题可以提出,我会给我我的理解。
原理:将二进制串和CRC生成多项式做多项式除法操作,最后得到的余数就是该串的CRC值.除法过程中余数是采用异或运算的结果.举例如下:CRC生成多项式:10011(生成多项式首项和末尾项必须为1,规定为这样,别问为什么)目标串:1010100110101000111111011除法过程:
1010100110101000111111011异或10011
----------
0011000110101000111111011异或  10011    ----------    01011110101000111111011   异或10011     ----------     0010010101000111111011       10011       ----------       00001101000111111011           10011           ----------           0100100111111011            10011            ----------            000010111111011                10011                ----------                00100111011                  10011                  ----------                       1011余数,CRC值.当使用该方法时,计算出的CRC32的值和其他软件计算的结果不一样,这是因为1.标准CRC32使用了查表的方法;2.在生成原始表时,需要将目标串高低位颠倒,然后使用生成多项式做除法,除的余数再进行高低位颠倒,从而生成对应的表项。至于为什么要调换高低位来生成表数据,据说是某些硬件厂商在进行CRC计算时,将生成多项式的高低为进行了交换(也可能是当时没注意高位低位问题,所以就得出了错误的计算结果,但是处于垄断地位的它就没有做修改,而是把这个错误的CRC过程定义为正确的),后来CRC软件实现时,为了和硬件计算保持一致,也采用了这种方法,因此在计算表项时需要进行高低为颠倒.
查表算法原理:以之前的计算过程为例,本次计算过程中每次前进1位,过程如下:  
1010100110101000111111011异或 10011
----------
011000110101000111111011异或 00000     ----------    11000110101000111111011 异或 10011     ----------     1011110101000111111011   异或10011     ----------      010010101000111111011      00000      ----------       10010101000111111011       10011       ----------        0001101000111111011        00000        ----------         001101000111111011            00000         ----------          01101000111111011             00000          ----------           1101000111111011              10011           ----------            100100111111011            10011            ----------             00010111111011             00000             ----------              0010111111011              00000              ----------               010111111011               00000               ----------                10111111011                10011                ----------                 0100111011                 00000                 ----------                  100111011                      10011                  ----------                   00001011                    .......                       1011余数,CRC值.观察上面的计算过程,当目标字符串的最高位是1时,则和生成多项式进行异或操作,当目标字符串最高位0时,则和00000进行异或操作。如果使用0011和0000作为表项(去掉生成多项式的最高位1),那么当目标位的最高位为1时,移出最高位的1,将剩余串的高4位与0011异或,如果目标字符串最高位为0,则移出最高位0,剩余串的高4位和0000异或,最终得到的余数就是CRC值。在CRC32中,我们将要移出的增加为8位,这8位的组合方法有2的8次方等于256,范围从00000000到11111111。我们分别计算这256个串的CRC值,就得到了表项值,后边的计算中,我们就可以使用表项值作为生成多项式与目标串进行异或操作。
CRC32的生成多项式:04C11DB7(16进制)去掉最高位的1计算00000001项的值:先将该项反转得10000000(二进制),和生成多项式进行异或操作10000000+32个000000000 4C11DB7-------------------------------10000000 4C11DB7 000000004C11DB7-------------------------------................把前8位全部移出后,得到的余数就是CRC值,将该值进行反转,则得到:,即表的00000001项,CRC生成多项式为77073096。按这种方法计算所有项的制,则得到CRC32的表。以后计算CRC值就可以一次移出一个字节,看该字节是多少,就取对应的表项和剩余串的最高位 进行异或操作即可。
&&&&推荐文章:
【上篇】【下篇】君,已阅读到文档的结尾了呢~~
CRC循环校验码详解
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
CRC循环校验码详解
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口【分享】16位CRC校验(冗余循环校验)_坚持分享吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:17贴子:
【分享】16位CRC校验(冗余循环校验)
模二除法://=========================================//16位CRC手算法//=========================================多项式:x16+x15+x2+1 即:0x18005
待求数:0x81
即:①:人工手算:
将0x81左移16位00101
和0x18005做模二除法----------------------- 00101
-----------------------
00101 -----------------------
-----------------------
-----------------------
-----------------------
-----------------------
//比0x18005小,不能再除,此值即为CRC:0x0306
②:在计算机中实现:0000 将0x81左移8位 如果最高位是1,则再左移1位后和0x8005进行异或【为什么是0x8005而不是0x18005呢?自己想想。】0000左移1位第①次0101
左移前高位为1,与0x8005异或----------------0101结果 1010
左移1位第②次0101左移前高位为1,与0x8005异或----------------1111结果1110左移1位第③次0101----------------10110110左移1位第④次0101----------------00110110左移1位第⑤次0101----------------00110110左移1位第⑥次0101----------------00110110左移1位第⑦次0101----------------00110110左移1位第⑧次左移前高位为0 所以不用与0x8005异或00 0110
0x的16位CRC值VC++6.0程序:#include &stdio.h&#define u8unsigned char#define u16unsigned short int#define u32unsigned intvoid main(void){u16 crc = 0;u16 num = 0x81;u8 i = 0;while(1){printf(&\n\t【请输入】:&);scanf(&%d&,&num);num &&= 8;
//把num左移8位后,num的最高位和0x8005的最高位对齐,然后才能进行模二除法crc =for(i=0;i&8;i++){if(crc&0x8000){crc &&= 1;crc = crc^0x8005;}else{crc &&= 1;}}printf(&\n&);printf(&\t【计算结果】:\n&);printf(&\t【 十进制 】:\t%d\n&,crc);printf(&\t【十六进制】:\t0x%04X\n\n&,crc);printf(&\t按ESC键退出,其他键继续\n&);if(getch() == 27)exit(0);}}
CRC.rar大小:316.26KB下载:0次转存:0次CRC_Calc+v0.1.exe大小:1012.00KB下载:0次转存:0次GCRC.exe大小:5.90MB下载:0次转存:0次
贴吧热议榜
使用签名档&&
保存至快速回贴crc32 实现CRC循环校验功能,是数据传输过程中, 信道质量和 是否有 错误的很好的 Communication 通讯编程 238万源代码下载-
&文件名称: crc32
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 2482 KB
&&上传时间:
&&下载次数: 4
&&提 供 者:
&详细说明:实现CRC循环校验功能,是数据传输过程中,校验信道质量和数据是否有传输错误的很好的校验方式。-CRC32 asdfaf
sdfsdgfs gsdgfsdgfsdg
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&i386d\Crc32.obj&&.....\Crc32.pch&&.....\Crc32.res&&.....\Crc32d.exe&&.....\Crc32d.ilk&&.....\Crc32d.pdb&&.....\Crc32Dlg.obj&&.....\Crc32Dynamic.obj&&.....\Crc32Static.obj&&.....\HiResTimer.obj&&.....\StdAfx.obj&&.....\vc60.idb&&.....\vc60.pdb&&....ur\Crc32.obj&&......\Crc32.pch&&......\Crc32.res&&......\Crc32Dlg.obj&&......\Crc32Dynamic.obj&&......\Crc32Static.obj&&......\Crc32u.exe&&......\HiResTimer.obj&&......\StdAfx.obj&&......\vc60.idb&&res\Crc32.ico&&...\Crc32.rc2&&resource.h&&Crc32.rc&&StdAfx.h&&StdAfx.cpp&&Common.h&&Crc32.h&&Crc32.cpp&&Crc32Dlg.h&&HiResTimer.h&&HiResTimer.cpp&&Crc32Dlg.cpp&&Crc32.001&&Crc32Dynamic.h&&Crc32Static.h&&Crc32Dynamic.cpp&&Crc32.dsp&&Crc32.dsw&&Crc32Static.cpp&&Crc32.plg&&Crc32.aps&&Crc32.opt&&Crc32.ncb&&i386d&&i386ur&&res
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 400套超酷网站模板 有很多朋友做网站的时候都因为没有模板而着急,现在好了,有400套提供给你了!
&[] - 采用C/S架构,实现用户的注册和登陆功能,将注册的信息上传至数据库,登陆时进行简单的数据比对。成功登陆后,服务端开辟一个新线程来处理登录用户的请求,服务端的主线程继续接收其他客户端的请求
&[] - 在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。crc32校验的源代码
&[] - in manet black hole attack ns2 using
&[] - AT指令集,可以帮助读者更全面的查找指令及其功能,对大家进行GPRS操作有不错的帮助HJT212 的CRC循环冗余校验
[问题点数:50分,结帖人lxt2581324]
HJT212 的CRC循环冗余校验
[问题点数:50分,结帖人lxt2581324]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年1月 MS-SQL Server大版内专家分月排行榜第二2015年12月 MS-SQL Server大版内专家分月排行榜第二2015年11月 MS-SQL Server大版内专家分月排行榜第二2015年5月 MS-SQL Server大版内专家分月排行榜第二2015年4月 MS-SQL Server大版内专家分月排行榜第二2015年1月 VB大版内专家分月排行榜第二2015年1月 MS-SQL Server大版内专家分月排行榜第二2014年12月 VB大版内专家分月排行榜第二2014年11月 MS-SQL Server大版内专家分月排行榜第二2014年9月 MS-SQL Server大版内专家分月排行榜第二2013年8月 VB大版内专家分月排行榜第二2013年6月 VB大版内专家分月排行榜第二2013年5月 VB大版内专家分月排行榜第二2010年4月 VB大版内专家分月排行榜第二2010年3月 VB大版内专家分月排行榜第二2008年12月 VB大版内专家分月排行榜第二2008年8月 VB大版内专家分月排行榜第二2008年7月 VB大版内专家分月排行榜第二2007年11月 VB大版内专家分月排行榜第二
2015年6月 MS-SQL Server大版内专家分月排行榜第三2015年3月 MS-SQL Server大版内专家分月排行榜第三2015年2月 MS-SQL Server大版内专家分月排行榜第三2014年12月 MS-SQL Server大版内专家分月排行榜第三2014年10月 VB大版内专家分月排行榜第三2014年10月 MS-SQL Server大版内专家分月排行榜第三2014年8月 MS-SQL Server大版内专家分月排行榜第三2013年9月 VB大版内专家分月排行榜第三2013年3月 VB大版内专家分月排行榜第三2012年5月 VB大版内专家分月排行榜第三2012年4月 VB大版内专家分月排行榜第三2010年10月 VB大版内专家分月排行榜第三2010年8月 VB大版内专家分月排行榜第三2010年7月 VB大版内专家分月排行榜第三2009年5月 VB大版内专家分月排行榜第三2008年9月 VB大版内专家分月排行榜第三2008年4月 VB大版内专家分月排行榜第三2008年2月 VB大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 crc校验算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信