public static byte[] Decode(byte[] datas) { var header = new HuffmanTreeHeader(datas, false); var root = BuildTree(header.FreqArray).Item1; var resultBytes = new byte[header.DataLength]; var bits = new BitArray(datas.Skip(header.HeaderLength).ToArray()); var bitIndex = 0; for (var i = 0; i < header.DataLength; i++) { resultBytes[i] = Decode(bits, ref bitIndex, root); } return(resultBytes); }
public static byte[] Encode(byte[] datas) { var header = new HuffmanTreeHeader(datas, true); var leafNodeList = BuildTree(header.FreqArray).Item2; var encodingTable = BuildEncodingTable(leafNodeList); var encodedSource = new List <bool>(datas.Length * 8 + header.HeaderLength * 8); foreach (var data in datas) { encodedSource.AddRange(encodingTable[data]); } var encodedSourceBytes = encodedSource.ToBytes(); encodedSource.Clear(); var bytes = new byte[header.HeaderLength + encodedSourceBytes.Length]; header.ToBytes().CopyTo(bytes, 0); encodedSourceBytes.CopyTo(bytes, header.HeaderLength); return(bytes); }