实验九、链路层实验——基于CRC编码的检错程序的实现实验报告

实验九、链路层实验——基于CRC编码的检错程序的实现实验报告

ID:38698490

大小:79.50 KB

页数:5页

时间:2019-06-17

实验九、链路层实验——基于CRC编码的检错程序的实现实验报告_第1页
实验九、链路层实验——基于CRC编码的检错程序的实现实验报告_第2页
实验九、链路层实验——基于CRC编码的检错程序的实现实验报告_第3页
实验九、链路层实验——基于CRC编码的检错程序的实现实验报告_第4页
实验九、链路层实验——基于CRC编码的检错程序的实现实验报告_第5页
资源描述:

《实验九、链路层实验——基于CRC编码的检错程序的实现实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验九、链路层实验——基于CRC编码的检错程序的实现实验报告序号:姓名:学号:2成绩指导教师一、实验目的1、通过实验,掌握CRC编码和解码的原理。2、掌握基于CRC编码的差错检测技术。二、实验指导现在计算机网络广泛采用的差错检测技术是基于CRC(cyclicredundancycheck)循环冗余检测编码,CRC也称为多项式编码(polynomialcode),CRC算法非常容易用硬件实现。CRC编码操作如下:对给定的数据D,发送者选择r个附加位,追加到D的末尾,形成d+r位的新位型,该位型正好能被G模2除尽。其中,G称为生成器。CRC编码算法实

2、现:1、选择生成多项式G,其最高次方为r,即r+1位的二进制位串2、计算D·2r,即在数据D后面补r个0,构成d+r位的位串3、按模2除法求(D·2r/G)的余数R,即:4、从D·2r中模2减去R,得到新的数据T,即加了CRC的帧三、实验要求1、设置一个d位的数据D,r+1位的多项式G,生成CRC码,并把此CRC码作为数据帧进行传送。2、编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。3、要求分别以正确和错误的数据来检验此检错程序。4、将编写程序的源代

3、码加必要注释和程序运行结果一起填入实验报告中。提示:1、编写程序时数据直接用二进制数,可能用到位操作符^(异或)和<<(左移)。2、在设置错误的编码时,错误位数最好不要超过r+1位。四、程序代码:#includeintcrc(intD[],intG[],intx,intn);//该函数用于进行异或运算voidmain(){while(1){intd,g,n,m,result;g;intD[100],M[100],G[100],i,j;//D[]余数,M[]被除数printf("请输入生成器长度:");scanf("%d",&g)

4、;printf("请输入生成器为(空格输入):");for(j=0;j<=g-1;j++)//将输入的除数按位存储在数组G[j]scanf("%d",&G[j]);printf("请选择你要进行的操作:1,CRC编码2,CRC解码:");scanf("%d",&n);if(n==1){printf("请输入原始数据长度=");scanf("%d",&d);printf("请输入原始数据为(空格输入):");for(i=0;i<=d-1;i++)//将输入的数据按位存储进数组M[i]scanf("%d",&M[i]);f

5、or(i=0;i<=d-1;i++)D[i]=M[i];//将数组M[i]中的数据赋值给D[i]for(i=d;i<=d+g-2;i++)//将数据左移r位,后面补r+1个零D[i]=0;crc(D,G,d+g-1,g);//调用函数,进行异或运算for(i=0;i<=d-1;i++)D[i]=D[i]+M[i];//将g-1位的余数加到数据后面,即为发送方发送的完整数据printf("发送方发送的数据为:");for(i=0;i<=d+g-2;i++)printf("%d",D[i]);printf("");}if(n==2){prin

6、tf("请输入你要进行校验的数据长度=");scanf("%d",&m);printf("请输入要进行校验的数据为(空格输入):");for(i=0;i<=m-1;i++)scanf("%d",&M[i]);result=crc(M,G,m,g);//调用函数,进行异或运算,并返回结果if(result==0)printf("数据完全正确");if(result!=0)printf("数据有错误");}}}intcrc(intD[],intG[],intx,intn)//该函数用于进行异或运算{inti,j,k,result;

7、printf("以下输出异或运算的全过程,最后一行为余数");for(k=0;k<=x-1;k++)//x=d+rprintf("%d",D[k]);//输出补后的数for(i=0;i<=x-n+1;i++)//输出异或运算的全过程{if(D[i]==1)//当首位为1时进行异或{for(j=0;j<=n-1;j++)//n=g{if(D[i+j]==G[j])//G[]的第j+1个数和D[]的第i+j+1个数相同时D[i+j]=0;//异或运算,相同为,不同为elseD[i+j]=1;}printf("");//输出每次异或后的结果fo

8、r(k=0;k<=x-1;k++)printf("%d",D[k]);//输出最后余数}}for(k=0;k<=x-1;k++)resu

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

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

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