欢迎来到天天文库
浏览记录
ID:55788654
大小:142.50 KB
页数:8页
时间:2020-06-02
《CRC校验实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验三CRC校验一、CRC校验码的基本原理编码过程:CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。其实现步骤如下:1设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位。2用生成多项式g(x)去除,求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。3将y(x)的尾部加上校验码,得到二进制多项式。就是包含了CRC校验码的待发送字符串。解码过程:从CRC的编码规则可以看出
2、,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式所以解码时可以用接收到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时,可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。解码过程示例:运行结果:附录(实现代码):usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace
3、CRC{publicabstractclassChange{//////字节数组转进制//////字节数组///字节数组长度publicstaticstringByteToHex(byte[]bytes,intb1){stringreturnStr="";if(bytes!=null){for(inti=0;i4、returnStr;}//////16进制转字节数组//////16进制数publicstaticbyte[]HexToByte(stringhexStr){hexStr=hexStr.Replace("","");if((hexStr.Length%2)!=0)hexStr+="";//空格byte[]bytes=newbyte[hexStr.Length/2];for(inti=0;i5、xStr.Substring(i*2,2),16);}returnbytes;}//////字符串转进制//////字符串///publicstaticstringStrToHex(stringstr){if(str=="")return"";byte[]bTemp=System.Text.Encoding.Default.GetBytes(str);returnByteToHex(bTemp,bTemp.Length);}///6、>///16进制转字符串//////16进制///publicstaticstringHexToStr(stringstr){byte[]bytes=newbyte[str.Length];bytes=HexToByte(str);returnEncoding.Default.GetString(bytes);}}}namespaceCRC{//哈夫曼树150//结点类Node的定义如下:publicclassNode{privateintweight;//结点权7、值privateintlChild;//左孩子结点privateintrChild;//右孩子结点privateintparent;//父结点//结点权值属性publicintWeight{get{returnweight;}set{weight=value;}}//左孩子结点属性publicintLChild{get{returnlChild;}set{lChild=value;}}//右孩子结点属性publicintRChild{get{returnrChild;}set{rChild=value;}}//父结点属性publicint
4、returnStr;}//////16进制转字节数组//////16进制数publicstaticbyte[]HexToByte(stringhexStr){hexStr=hexStr.Replace("","");if((hexStr.Length%2)!=0)hexStr+="";//空格byte[]bytes=newbyte[hexStr.Length/2];for(inti=0;i5、xStr.Substring(i*2,2),16);}returnbytes;}//////字符串转进制//////字符串///publicstaticstringStrToHex(stringstr){if(str=="")return"";byte[]bTemp=System.Text.Encoding.Default.GetBytes(str);returnByteToHex(bTemp,bTemp.Length);}///6、>///16进制转字符串//////16进制///publicstaticstringHexToStr(stringstr){byte[]bytes=newbyte[str.Length];bytes=HexToByte(str);returnEncoding.Default.GetString(bytes);}}}namespaceCRC{//哈夫曼树150//结点类Node的定义如下:publicclassNode{privateintweight;//结点权7、值privateintlChild;//左孩子结点privateintrChild;//右孩子结点privateintparent;//父结点//结点权值属性publicintWeight{get{returnweight;}set{weight=value;}}//左孩子结点属性publicintLChild{get{returnlChild;}set{lChild=value;}}//右孩子结点属性publicintRChild{get{returnrChild;}set{rChild=value;}}//父结点属性publicint
5、xStr.Substring(i*2,2),16);}returnbytes;}//////字符串转进制//////字符串///publicstaticstringStrToHex(stringstr){if(str=="")return"";byte[]bTemp=System.Text.Encoding.Default.GetBytes(str);returnByteToHex(bTemp,bTemp.Length);}///6、>///16进制转字符串//////16进制///publicstaticstringHexToStr(stringstr){byte[]bytes=newbyte[str.Length];bytes=HexToByte(str);returnEncoding.Default.GetString(bytes);}}}namespaceCRC{//哈夫曼树150//结点类Node的定义如下:publicclassNode{privateintweight;//结点权
6、>///16进制转字符串///
7、值privateintlChild;//左孩子结点privateintrChild;//右孩子结点privateintparent;//父结点//结点权值属性publicintWeight{get{returnweight;}set{weight=value;}}//左孩子结点属性publicintLChild{get{returnlChild;}set{lChild=value;}}//右孩子结点属性publicintRChild{get{returnrChild;}set{rChild=value;}}//父结点属性publicint
此文档下载收益归作者所有