我有一个程序可以从旧系统读取文件。 每个文件中的一部分数据(不是整个文件)是使用一种未知的压缩方案进行压缩的,我需要知道如何解压缩。 我有压缩前后的数据示例。 我不确定如何确定压缩方案,并希望这里有人知道如何解决这个问题。 根据一些谷歌搜索,最常见的压缩方案似乎是霍夫曼编码,尽管在实现并测试它之后,这似乎并不是所使用的方案。
这是压缩前的一段数据的示例(以十六进制字节为单位):
55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 54 54 54 54 54 54 54 54 54 54 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 53 53 53 53 53 53 53 53 53 53 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 53 53 52 52 52 52 52 52 52 52 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 53 52 52 51 51 51 51 51 51 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 52 51 51 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 51 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 50 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 51 51 50 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 52 52 51 51 50 50 50 50 50 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 53 53 52 52 51 51 51 51 51 51 51 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 53 53 52 52 52 52 52 52 52 52 52 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 53 53 53 53 53 53 53 53 53 53 53 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 54 54 54 54 54 54 54 54 54 54 54 54 54 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
这是压缩后的同一部分:
1F 55 01 00 D7 18 54 01 00 0D F7 00 36 54 54 53 01 00 0D 1F 00 00 1E 00 14 52 01 00 0F 1F 00 00 00 1E 00 12 51 01 00 0F 1F 00 02 00 1E 00 10 50 01 00 0F 1F 00 04 03 1E 00 0F 1F 00 06 00 3B 00 0F 1F 00 A3 11 51 B9 00 0F D9 00 05 04 20 00 0F F8 00 03 01 20 00 01 02 00 0F 36 01 01 01 20 00 03 02 00 0E 74 01 01 20 00 05 02 00 0D B2 01 00 D3 01 07 02 00 00 11 00 0F 02 00 9E 50 55 55 55 55 55
以下是我对数据的了解:
-正在压缩的数据部分始终是压缩前的 961 字节。 它代表一个 31x31 网格,每个单元格一个字节的数据。
-每个单元格包含两个值。 每个值只能是 0-5 之间的整数。 由于只有六个可能的值,因此每个值都存储在一个半字节而不是整个字节中。 因此,如果单元格的值为 0x52,则它代表十进制值 5 和 2,而不是 82。
-压缩后数据的长度是可变的。
-数据没有公共前缀(第一个字节不同)。
如果有人可以帮助我确定正在使用的压缩方案,甚至为我指明正确的方向,我将非常感激。
它是 lz4 输出,其中删除了一些字节。如果我在您的输入上使用
lz4 -l
,然后去掉前八个字节,我就会得到您的输出。