它确实似乎是 LZ77 变体,其中 8 个编码/未编码标志组合成单个标志字节。
然后将压缩数据分组为 8 个数据“单元”,其中每个单元由单个未压缩字节或 2 字节字典条目表示。
一批 8 个单元的数据前面是标志字节,其中每个 8 位指示每个单元是未压缩字节还是字典条目。
这里没有足够的数据来 100% 确定字典条目的编码或任何窗口是什么,因为示例数据中只有 2 个(相同的)字典条目。然而,2 字节条目似乎很可能由 12 位偏移量和 4 位长度组成,参考先前解压缩的数据。
对于压缩数据,解压过程如下 -
compressed decompressed
flags data offset data
00
0=>raw 89 -> 0000: 89
0=>raw 50 -> 0001: 50
0=>raw 4e -> 0002: 4e
0=>raw 47 -> 0003: 47
0=>raw 0d -> 0004: 0d
0=>raw 0a -> 0005: 0a
0=>raw 1a -> 0006: 1a
0=>raw 0a -> 0007: 0a
00
0=>raw 00 -> 0008: 00
0=>raw 00 -> 0009: 00
0=>raw 00 -> 000A: 00
0=>raw 0d -> 000B: 0d
0=>raw 49 -> 000C: 49
0=>raw 48 -> 000D: 48
0=>raw 44 -> 000E: 44
0=>raw 52 -> 000F: 52
08
0=>raw 00 -> 0010: 00
0=>raw 00 -> 0011: 00
0=>raw 02 -> 0012: 02
0=>raw 58 -> 0013: 58
1=>dict 00 83 -> 0014: 00 00 00 // copy of 3 bytes from offset 8
0=>raw 5A -> 0017: 5A
0=>raw 08 -> 0018: 08
0=>raw 06 -> 0019: 06
80
1=>dict 00 83 -> 001A: 00 00 00 // copy of 3 bytes from offset 8
0=>raw 64 -> 001D: 64
0=>raw 31 -> 001E: 31
0=>raw 28 -> 001F: 28
0=>raw fe -> 0020: fe
0=>raw ... -> 0021: ...
0=>raw ... -> 0022: ...
0=>raw ... -> 0023: ...