整数列表二进制表示的文件压缩/解压缩

问题描述

目前,我有一个将整数列表转换为其二进制表示的系统。我计算每个数字所需的字节数,然后使用 to_bytes() 函数将它们转换为字节,如下所示:

o = open(outFileName,"wb")
for n in result:
    numBytes = math.ceil(n.bit_length()/8)
    o.write(n.to_bytes(numBytes,'little'))

o.close()

然而,由于字节长度不同,有什么方法可以让解包程序/函数知道每个字节有多长?我听说过 struct 模块的使用,特别是 pack 函数的使用,但考虑到效率和尽可能地减小文件的大小,解决这个问题的最佳方法是允许这样的解包程序检索原始编码整数的确切列表?

解决方法

你不能。您的编码将不同的整数列表映射到相同的字节序列。那么就不可能知道哪个是原始输入。

您需要不同的编码。

看看如何使用 high bit each byte。根据整数的分布情况,还有其他可能更好的方法,例如 Golomb coding