欢迎来到天天文库
浏览记录
ID:14267910
大小:468.00 KB
页数:8页
时间:2018-07-27
《crc冗余码校验编程实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、昆明理工大学(计算机网络)实验报告实验名称:CRC冗余码校验编程实验一、实验目的:掌握CRC冗余码校验编程二、实验原理: 1.设置CRC寄存器,并给其赋值FFFF(hex)。 2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右移一位,MSB(最高位)补零,移出并检查LSB(最低位)。 4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。 6.重复第2至第5步直到所有数据全部处理完成。 7.最终C
2、RC寄存器的内容即为CRC值。常用的CRC循环冗余校验标准多项式如下: CRC(12位)=X12+X11+X3+X2+X+1 CRC(16位)=X16+X15+X2+1 CRC(CCITT)=X16+X12+X5+1 CRC(32位)=X32+X26+X23+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1以CRC(16位)多项式为例,其对应校验二进制位列为11000000000000101。 注意:这儿列出的标准校验多项式都含有(X+1)的多项式因子;各多项式的系数均为二进制数,所涉及的四则运算仍遵循对二取模的运算规则。 (注:对二取模的四则运算指参与运算的两个
3、二进制数各位之间凡涉及加减运算时均进行XOR异或运算,即:1XOR1=0,0XOR0=0,1XOR0=1,0XOR1=1,即相同为0,不同为1)三、实验内容及步骤:打开VC选择新建点击“完成”,出现编辑添加控件在对话框上单击右键,选择建立类向导,出现如下对话框,添加成员变量返回最初的对话框单击“开始编码”按钮,选择建立类向导,如下图所示,添加功能函数单击EditCode添加如下函数voidCGuoshuminDlg::OnButton1(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);intn,p,k,q,i
4、,j=0;LPCSTRhead,g,begain,str1,str3;CStringstrEdit=m_strEdit1,s=CString("01");n=strlen(m_strEdit3)-1;if(strlen(m_strEdit1)==0&&strlen(m_strEdit3)==0){MessageBox("没有输入数据!请重新填写!");return;}if(strlen(m_strEdit1)==0&&strlen(m_strEdit3)!=0){MessageBox("没有输入要编码的数据!请重新填写!");return;}if(strlen(m_strEdit1)!=0&&
5、strlen(m_strEdit3)==0){MessageBox("没有输入校验多项式!请重新填写!");return;}str1=m_strEdit1;str3=m_strEdit3;for(intI=0;(str1[I]=='0'
6、
7、str1[I]=='1')&&I8、9、str3[J]=='1')&&J10、strlen(m_strEdit3)){MessageBox("输入的校验多项式不合理!请重新填写!");return;}for(k=n;k>0;k--)strEdit+=CString("0");strEdit=LPCSTR(strEdit);head=strEdit;for(;strlen(head)>=strlen(m_strEdit3);){g=m_strEdit3;for(i=0;*g!=' ';i++,g++){if(*(head+i)==*g)strEdit.SetAt(i+j,s[0]);//CString("0");elsestrEdit.SetAt(i+j,s[1]);/11、/CString("1");}q=0;for(;strEdit[q]!='1'&&q
8、
9、str3[J]=='1')&&J10、strlen(m_strEdit3)){MessageBox("输入的校验多项式不合理!请重新填写!");return;}for(k=n;k>0;k--)strEdit+=CString("0");strEdit=LPCSTR(strEdit);head=strEdit;for(;strlen(head)>=strlen(m_strEdit3);){g=m_strEdit3;for(i=0;*g!=' ';i++,g++){if(*(head+i)==*g)strEdit.SetAt(i+j,s[0]);//CString("0");elsestrEdit.SetAt(i+j,s[1]);/11、/CString("1");}q=0;for(;strEdit[q]!='1'&&q
10、strlen(m_strEdit3)){MessageBox("输入的校验多项式不合理!请重新填写!");return;}for(k=n;k>0;k--)strEdit+=CString("0");strEdit=LPCSTR(strEdit);head=strEdit;for(;strlen(head)>=strlen(m_strEdit3);){g=m_strEdit3;for(i=0;*g!=' ';i++,g++){if(*(head+i)==*g)strEdit.SetAt(i+j,s[0]);//CString("0");elsestrEdit.SetAt(i+j,s[1]);/
11、/CString("1");}q=0;for(;strEdit[q]!='1'&&q
此文档下载收益归作者所有