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); }