private void FakeCompress(ref byte[] Data) { CompressionHeader Header = new CompressionHeader() { Magic = 1, dLen = (uint)Data.LongLength }; List <byte> Buffer = new List <byte>(); for (uint i = 0, x = 0; i < Data.Length; i++, x--) { if (x == 0) { x = 8; Buffer.Add(0xFF); } Buffer.Add(Data[i]); } Header.cLen = (uint)Buffer.LongCount() + 0x8; Buffer.InsertRange(0, Tools.BuildStruct(ref Header)); Data = null; Data = Buffer.ToArray(); }
private void Compress(ref byte[] Data) { CompressionHeader Header = new CompressionHeader() { Magic = 1, dLen = (uint)Data.LongLength }; List <byte> Output = new List <byte>(); List <byte> Buffer = new List <byte>(); byte f = 0; for (uint i = 0, x = 8; i < Data.LongLength; i++) { for (byte Cnt = 0x11; Cnt > MinCompressMatch && i + Cnt < Data.LongLength; Cnt--) { byte[] Tmp = GetRange(Data, i, Cnt); for (ushort r = Cnt; r < 0xFFF && r <= i; r++) { if (Data[i - r] == Tmp[0] && EqualsAt(Data, Tmp, i - r)) { Buffer.Add((byte)(((r & 0xF) << 4) | (Cnt - 2))); Buffer.Add((byte)(r >> 4)); i += (uint)Cnt - 1; goto Cont; } } } f |= (byte)(1 << (int)(8 - x)); Buffer.Add(Data[i]); Cont :; x--; if (x == 0) { Output.Add(f); Output.AddRange(Buffer); Buffer = new List <byte>(); x = 8; f = 0; } } if (Buffer.Count != 0) { Output.Add(f); Output.AddRange(Buffer); } Header.cLen = (uint)Output.LongCount() + 0x8; Output.InsertRange(0, Tools.BuildStruct(ref Header)); Data = null; Data = Output.ToArray(); }