Exemple #1
0
        public static string Decode(byte[] data)
        {
            using var ms = new MemoryStream(data);
            int dictLen = ms.ReadByte(); // ilość znaków
            var dict    = new Dictionary <BitSequence, char>();

            // odczytanie słownika
            for (int i = 0; i < dictLen; i++)
            {
                char        c      = (char)ms.ReadByte();     // znak
                int         seqLen = ms.ReadByte();           // długośc znaku
                BitSequence seq    = new BitSequence(seqLen); // kod
                ms.Read(seq.rawData, 0, seq.ByteCapacity);
                seq.PushLength(seqLen);                       // odczytanie kodu
                dict[seq] = c;                                // dodanie do słownika
            }

            int padding = ms.ReadByte(); // margines

            int encodedLen = ms.Capacity - (int)ms.Position;

            byte[] encoded = new byte[encodedLen];
            ms.Read(encoded, 0, encodedLen);
            string decoded = Decode(encoded, padding, dict); // odkowowanie

            return(decoded);
        }