CRC校验用处是这样,设有一帧数据,根据某种规则,

CRC校验用处是这样,设有一帧数据,根据某种规则,

ID:37825500

大小:318.00 KB

页数:8页

时间:2019-05-31

CRC校验用处是这样,设有一帧数据,根据某种规则,_第1页
CRC校验用处是这样,设有一帧数据,根据某种规则,_第2页
CRC校验用处是这样,设有一帧数据,根据某种规则,_第3页
CRC校验用处是这样,设有一帧数据,根据某种规则,_第4页
CRC校验用处是这样,设有一帧数据,根据某种规则,_第5页
资源描述:

《CRC校验用处是这样,设有一帧数据,根据某种规则,》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、CRC校验的用处是这样的,设有一帧数据,根据某种规则,由这帧数据得到一个或多个字节,我们称这一个或多个字节就是一个CRC码,将这帧数据加上这个CRC码一起发送出去,接收方接到这帧数据和CRC码,采用相同的规则,由这帧数据得到一个CRC码,如果这个由接收方计算出来的CRC码和接收到的CRC码一样(这里一般认为CRC码不会在传送过程中出错),就说明这帧数据在传送过程中没有出错。如果不一样,就说明这帧数据在传送中出错了,可以通知发送方重新发送。这就是CRC码存在的价值。从网上搜索到的资料来看,对CRC的介绍往往建立在较抽象的数据基础上,这样不易于让读者迅速地掌握,甚而望而却步。对于工科学生来说,我们

2、往往更关心的是能否正确使用,而不必事事都追根溯源。我更倾向于思索事理的存在性。设有一帧数据,为简单起见,设这帧数据就由一个字节组成,设这个字节为0xA0,将该字节左移8位,和0x107做移位异或运算,最后取‘余’(这里的余数和我们小学学习的除法上的余数是不一样了),得出的‘余数’就是CRC码。其具体实施过程如图1所示。图1最终结果为0x69,它就是CRC码。根据图1对应的执行过程编写VC程序,如图2所示。#includeintlength=8;unsignedintjiaoyan=0x0107;intxinxilen=1;unsignedcharxinxi[1]={0x

3、A0};//,0x0C,0x34,0x00,0x03,0xAA,0x00,0x03,0xAE,0x00};//88//unsignedcharxinxi[18]={0xA0,0x00,0x05,0xBC,0x00,0x01,0x88,0x00,0x05,0xAB,0x00,0x0E,0x92,0x0F,0x12,0x10,0x20,0x6D};//8C//unsignedcharxinxi[18]={0xA0,0xFF,0xF6,0xDD,0xFF,0xF6,0x5C,0x00,0x07,0x81,0x00,0x0E,0x92,0x0F,0x12,0x10,0x23};//D9//unsign

4、edcharxinxi[18]={0xA0,0x00,0x00,0xE8,0xFF,0xFC,0x1B,0xFF,0xFB,0xC6,0x00,0x0E,0x92,0x0F,0x12,0x10,0x23,0xab};//98unsignedchar*pXinxiNew;voidSetpXinxiNew(){pXinxiNew=newunsignedchar[xinxilen+1];for(inti=0;i

5、rn0;for(inti=0;i<32;i++){ans=ans>>1;if(ans==0)returni+1;}returni;}unsignedintGetAddPart_sub(intpos1,intpos2){unsignedintzuhe=0;if(pos1==pos2)zuhe=pXinxiNew[pos1];elsefor(inti=pos1;i<=pos2;i++){zuhe=zuhe<<8;zuhe=zuhe+pXinxiNew[i];}returnzuhe;}unsignedintGetAddPart(intstart,intfinish){for(inti=0;i<=xi

6、nxilen;i++)if(8*(i+1)>=start)break;intpos1=i;for(i=0;i<=xinxilen;i++)if(8*(i+1)>=finish)break;intpos2=i;unsignedintzuhe=GetAddPart_sub(pos1,pos2);zuhe=zuhe>>((pos2+1)*8-finish);unsignedintsum=0,temp=0x01;for(i=0;i<=(finish-start);i++){sum=temp+sum;temp=temp<<1;}zuhe=zuhe∑returnzuhe;}unsignedintG

7、etNewPart(unsignedintans,int&pos){unsignedintpart=0;intlen=GetBitLen(ans);intpos1=pos+1;intpos2=pos+1+(length+1-len)-1;pos=pos2;unsignedintaddpart=GetAddPart(pos1,pos2);part=(ans<<(pos2-pos1+1))

8、addpa

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

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

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