CRC校验实验报告

上传人:人*** 文档编号:568254672 上传时间:2024-07-23 格式:PDF 页数:7 大小:165.76KB
返回 下载 相关 举报
CRC校验实验报告_第1页
第1页 / 共7页
CRC校验实验报告_第2页
第2页 / 共7页
CRC校验实验报告_第3页
第3页 / 共7页
CRC校验实验报告_第4页
第4页 / 共7页
CRC校验实验报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《CRC校验实验报告》由会员分享,可在线阅读,更多相关《CRC校验实验报告(7页珍藏版)》请在金锄头文库上搜索。

1、-实验三CRC 校验一、CRC 校验码的根本原理编码过程:CRC 校验码的编码方法是用待发送的二进制数据 t(*)除以生成多项式 g(*),将最后的余数作为 CRC 校验码。其实现步骤如下:1 设待发送的数据块是 m 位的二进制多项式 t(*),生成多项式为 r 阶的 g(*)。在数据块的末尾添加 r 个 0,数据块的长度增加到 m+r 位。2 用生成多项式 g*去除 ,求得余数为阶数为 r-1 的二进制多项式 y(*)。此二进制多项式 y(*)就是 t(*)经过生成多项式g(*)编码的 CRC 校验码。3 将 y(*)的尾部加上校验码,得到二进制多项式 。 就是包含了 CRC 校验码的待发送

2、字符串。解码过程:从 CRC 的编码规则可以看出,CRC 编码实际上是将代发送的m 位二进制多项式 t(*)转换成了可以被 g(*)除尽的 m+r 位二进制多项.z.-式所以解码时可以用接收到的数据去除 g* ,如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多 CRC 的硬件解码电路就是按这种方式进展检错的。同时,可以看做是由 t*和 CRC 校验码的组合,所以解码时将接收到的二进制数据去掉尾部的 r 位数据,得到的就是原始数据。解码过程例如:运行结果:附录实现代码 :using System;using System.Collections.Generi

3、c;using System.Te*t;namespace CRCpublic abstract classChange/ / 字节数组转进制/ / 字节数组/ 字节数组长度public static string ByteToHe*(byte bytes, int b1)string returnStr = ;.z.-if (bytes != null)for (int i = 0; i b1; i+)returnStr += bytesi.ToString(*2).ToUpper(); return returnStr;/ / 16 进制转字节数组/ / 16进制数public stati

4、c byte He*ToByte(string he*Str)he*Str = he*Str.Replace( , );if (he*Str.Length % 2) != 0)he*Str += ;/空格byte bytes = new bytehe*Str.Length / 2;for (int i = 0; i bytes.Length; i+)bytesi = Convert.ToByte(he*Str.Substring(i * 2, 2), 16);return bytes;/ / 字符串转进制/ / 字符串/ public static string StrToHe*(string

5、 str)if (str = ) return ;byte bTemp = System.Te*t.Encoding.Default.GetBytes(str);return ByteToHe*(bTemp, bTemp.Length);/ / 16 进制转字符串/ / 16进制.z.-/ public static string He*ToStr(string str)byte bytes = new bytestr.Length;bytes = He*ToByte(str);return Encoding.Default.GetString(bytes);namespace CRC/哈夫曼

6、树 150/ 结点类 Node 的定义如下:public class Nodeprivate int weight; /结点权值private int lChild; /左孩子结点private int rChild; /右孩子结点private int parent; /父结点/结点权值属性public int Weightgetreturn weight;setweight = value;/左孩子结点属性public int LChildgetreturn lChild;.z.-setlChild = value;/右孩子结点属性public int RChildgetreturn rC

7、hild;setrChild = value;/父结点属性public int Parentgetreturn parent;setparent = value;/构造器public Node()weight = 0;lChild = -1;rChild = -1;parent = -1;/构造器public Node(int w, int lc, int rc, int p)weight = w;lChild = lc;rChild = rc;parent = p;public class HuffmanTreeprivate List data = new List(); /结点数组pri

8、vate int leafNum; /叶子结点数目/索引器.z.-public Node thisint inde*getreturn datainde*;setdatainde* = value;/叶子结点数目属性 public int LeafNumpublic int LeafNumgetreturn leafNum;setleafNum = value;/构造器public HuffmanTree()public HuffmanTree(List m_NumKind)leafNum = m_NumKind.Count;for (int j = 0; j 2 * m_NumKind.Co

9、unt - 1; j+)/n 中字符共需要 2n-1 个节点Node databuff = new Node();if (j this.leafNum)databuff.Weight = m_NumKindj.num;data.Add(databuff);/每创立一个节点将节点参加节点数组data 当中public List Create()int ma*1, ma*2, tmp1, tmp2;/处理 n 个叶子结点,建立哈夫曼树.z.-for (int i = 0; i this.leafNum - 1; +i) ma*1 = ma*2 = Int32.Ma*Value;tmp1 = tmp

10、2 = 0;/在全部结点中找权值最小的两个结点for (int j = 0; j this.leafNum + i; +j)if (dataj.Weight ma*1) & (dataj.Parent = -1)ma*2 = ma*1;tmp2 = tmp1;tmp1 = j;ma*1 = dataj.Weight;else if (dataj.Weight ma*2) & (dataj.Parent = -1)ma*2 = dataj.Weight;tmp2 = j;datatmp1.Parent = this.leafNum + i;datatmp2.Parent = this.leafN

11、um + i;datathis.leafNum+i.Weight=datatmp1.Weight+datatmp2.Weight;datathis.leafNum + i.LChild = tmp1;datathis.leafNum + i.RChild = tmp2;return data;public class NumKindcharpublic char letter get; set; /字符public int num get; set; /字符出现的次数public List huffmancode get; set; /字符对应的 huffman 编码public class codeCharpublic char numChar get; set; public string codeCharater get; set; .z.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号