如何确定数据块正在使用哪种压缩方法?

问题描述 投票:0回答:1

我有一个程序可以从旧系统读取文件。 每个文件中的一部分数据(不是整个文件)是使用一种未知的压缩方案进行压缩的,我需要知道如何解压缩。 我有压缩前后的数据示例。 我不确定如何确定压缩方案,并希望这里有人知道如何解决这个问题。 根据一些谷歌搜索,最常见的压缩方案似乎是霍夫曼编码,尽管在实现并测试它之后,这似乎并不是所使用的方案。

这是压缩前的一段数据的示例(以十六进制字节为单位):

55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 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。

-压缩后数据的长度是可变的。

-数据没有公共前缀(第一个字节不同)。

如果有人可以帮助我确定正在使用的压缩方案,甚至为我指明正确的方向,我将非常感激。

algorithm compression binary-data
1个回答
0
投票

它是 lz4 输出,其中删除了一些字节。如果我在您的输入上使用

lz4 -l
,然后去掉前八个字节,我就会得到您的输出。

© www.soinside.com 2019 - 2024. All rights reserved.