计算机网络技术CRC冗余码检验
XXXX大学(计算机网络技术)实验报告
实验名称 CRC冗余码检验
实验时间 2011年03月30日
专业 姓名 学号
预习 操作 总评
教师签名
一.实验目的:
掌握CRC冗余码校验的基本原理,编程实现CRC冗余码校验。
二.实验要求:
在C++的MFC下来实现这一过程。
三.实验内容及运行结果:
CRC—32(循环冗余错误校验)生成CRC—32校验字节的步骤如下:
(1)装入一个32位寄存器,所有数位均为1。
(2)该32位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个32位寄存器。
(3)把这个32位寄存器向右移1位。
(4a)若向右(标记位)移出的数位是1,则生成多项式
10100000000000001010000000000001和这个寄存器进行“异或”运算。
(4b)若向右移出的数位是0,则返回(3)。
(5)重复(3)和(4),直至移出8位。
(6)另外24位与该32位寄存器进行“异或”运算。
(7)重复(3)—(6),直至该报文所有字节均与32位寄存器进行“异或”运算,并移位24次。
(8)这个32位寄存器的内容即4字节CRC错误校验
在C++下:文件新建—MFC AppWizard [exe]—创建的应用程序类型选择基本对话框—应用程序向导创建的类选择xxxDIg , 其它的属性默认系统设置。在资源菜单下设置自己喜欢的界面。添加相应参数,采用添加类的方式来完成。
对两个按钮的编写:
void CCrcydcDlg::OnButton1()
{
UpdateData(true);
int n,p,k,q,i,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 && strlen(m_strEdit3)==0 )
{
MessageBox("没有输入校验多项式!请重新填写!");
return ;
}
str1=m_strEdit1;
str3=m_strEdit3;
for(int I=0; (str1[I]=='0' || str1[I]=='1' ) && I < strlen(m_strEdit1) ;I++);
if( I < strlen(m_strEdit1) )
{MessageBox("输入的要编码的数据不合理!请重新填写!");
return ;
}
for(int J=0; (str3[J]=='0' || str3[J]=='1' ) && J < strlen(m_strEdit3) ;J++);
if( J < 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 != '\0' ; i++, g++ )
{
if( *(head+i) == *g )
strEdit.SetAt(i+j,s[0]);//CString("0") ;
else
strEdit.SetAt(i+j,s[1]);//CString