python - 如何在 Python 中打包任意位序列?

标签 python memory bit-packing

我想将一些二进制图像数据编码/压缩为位序列。 (一般来说,这个序列的长度不会完全适合所有标准整数类型。)

如何在不浪费空间的情况下做到这一点? (我意识到,除非位序列具有“不错”的长度,否则在最后总是必须有少量 [< 1 字节] 的剩余空间。)

FWIW,我估计每个要编码的符号最多需要 3 位。 Python 是否有用于此类工作的任何内置工具?

最佳答案

没有内置非常方便的东西,但有第三方模块,如bitstringbitarray这是为此而设计的。

from bitstring import BitArray
s = BitArray('0b11011')
s += '0b100'
s += 'uint:5=9'
s += [0, 1, 1, 0, 1]
...
s.tobytes()

要将 3 位数字序列(即范围 0->7)连接在一起,您可以使用

>>> symbols = [0, 4, 5, 3, 1, 1, 7, 6, 5, 2, 6, 2]
>>> BitArray().join(BitArray(uint=x, length=3) for x in symbols)
BitArray('0x12b27eab2')
>>> _.tobytes()
'\x12\xb2~\xab '

一些相关问题:

关于python - 如何在 Python 中打包任意位序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066119/

相关文章:

c - 如何使用 char 数组将位字段打包为短整数?

c# - 使用反射确定 .Net 类型在内存中的布局方式

c++ - 将字符打包成 5 位并将结果写入文件 (C++)

python - 更新 spaCy 词汇表

matlab - 使用 interp1 时内存不足。软件

python - Conda 尝试将大型默认库安装到新环境中

iphone直接使用NSString会导致内存泄漏吗?

c++ - 内存和处理高效的多维数据结构C++

python - 导入 nltk 时反复出现的问题

python - cumsum 重置为 NaN_2