Пример #1
0
        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);
        }
Пример #2
0
        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);
        }