1、所以解码时可以用接收到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时,可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。解码过程示例:运行结果:附录(实现代码):using System;using System.Collections.Generic;using System.Text;namespace CRC public abstract class Change / / 字节数组转进制/summaryparam n
2、ame=bytes字节数组b1字节数组长度 public static string ByteToHex(byte bytes, int b1) string returnStr = ; if (bytes != null) for (int i = 0; i b1; i+) returnStr += bytesi.ToString(x2).ToUpper(); return returnStr; / 16进制转字节数组hexStr16进制数 public static byte HexToByte(string hexStr) hexStr = hexStr.Replace( , ); if
3、 (hexStr.Length % 2) != 0) hexStr += /空格 byte bytes = new bytehexStr.Length / 2; bytes.Length; bytesi = Convert.ToByte(hexStr.Substring(i * 2, 2), 16); return bytes; / 字符串转进制str字符串 public static string StrToHex(string str) if (str = ) return byte bTemp = System.Text.Encoding.Default.GetBytes(str); r
4、eturn ByteToHex(bTemp, bTemp.Length); / 16进制转字符串16进制 public static string HexToStr(string str) byte bytes = new bytestr.Length; bytes = HexToByte(str); return Encoding.Default.GetString(bytes); /哈夫曼树 150 / 结点类Node的定义如下: public class Node private int weight; /结点权值 private int lChild; /左孩子结点 private i
5、nt rChild; /右孩子结点 private int parent; /父结点 /结点权值属性 public int Weight get return weight; set weight = value; /左孩子结点属性 public int LChild return lChild; lChild = value; /右孩子结点属性 public int RChild return rChild; set rChild = value; /父结点属性 public int Parent get return parent; set parent = value; /构造器 pub
6、lic 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 HuffmanTree private List data = new List(); /结点数组 private int leafNum; /叶子结点数目 /索引器 public Node thisint index return dataindex; datain
7、dex = value; /叶子结点数目属性public int LeafNum public int LeafNum return leafNum; leafNum = value; public HuffmanTree() public HuffmanTree(List m_NumKind) leafNum = m_NumKind.Count; for (int j = 0; j 2 * m_NumKind.Count - 1; j+)/n中字符共需要2n-1个节点 Node databuff = new Node(); if (j this.leafNum) databuff.Weigh
8、t = m_NumKindj.num;data.Add(databuff);/每创建一个节点将节点加入节点数组data当中 public List Create() int max1, max2, tmp1, tmp2; /处理n个叶子结点,建立哈夫曼树 this.leafNum - 1; +i) max1 = max2 = Int32.MaxValue; tmp1 = tmp2 = 0; /在全部结点中找权值最小的两个结点 this.leafNum + i; +j) if (dataj.Weight max1) & (dataj.Parent = -1) max2 = max1; tmp2 = tmp1; tmp1 = j; max1 = dataj.Weight; else if (dataj.Weight huffmancode get; /字符对应的huffman编码 public class codeChar public char numChar get; public string codeCharater get;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1