这是已知的二进制格式,还是自制的?

我目前正在解码二进制文件格式,以便对包含的数据进行一些内部分析。它主要存储整数或双精度数组,并使用某种压缩算法进行存储。当我对他们的压缩算法进行反向工程时,我开始怀疑我是否正在重新发明轮子。这是一个众所周知的压缩算法,我什至可以找到一个现有的C#库来进行读写,还是完全是自制的?

以下是一些示例:

字节[1,31]编码整数数组[31]。第一个字节(1)表示数组由一个数字组成。第二个字节(0)表示数字是一一列出的。第三个字节(31)是列出的数字。 (只要它小于255,就被写为一个字节。)

字节[1,128,31]编码相同的数组,但是第二个字节(128)表示下一个字节应重复1次(第一个字节)。这使我们可以通过将连续的相同数字列出为一个来压缩数组,例如[5,31]对数组[31,31,31]进行编码

更多示例:

[5,1,2,3,4,5] => [1,5]
[255,31] => [31,...,31] // (an array of 255 31's)

当数组的长度大于255时,它将以256的倍数添加到第二个字节。

[5,31] // (an array of 5 + 256*1 = 261 31's)

这适用于普通和重复数组:

[5,5,260,261] => [1,261] // (an array with the numbers from 1 to 261)

当数组中的任何数字大于255时,这些数字将分解为256的因数。

[1,3] => [4 + 256 * 3] => [772]
[3,17,2] => [4 + 256*2,17 + 256*2,0 + 256*2] => [516,529,512]

还有更多的复杂性,尤其是对于双打,但我认为这对于任何知道格式的人来说都是足够的。

有人识别这种二进制序列化/压缩方法吗?它有名字吗?是否有使用此技术的C#库?

jasonzhuhello 回答:这是已知的二进制格式,还是自制的?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3038221.html

大家都在问