kjo*_*kjo 4 python memory bit-packing
我想将一些二进制图像数据编码/压缩为序列(如果是位).(通常,此序列的长度不能完全适合整数个标准整数类型.)
如何在不浪费空间的情况下做到这一点?(我意识到,除非比特序列具有"漂亮"的长度,否则在最后总是必须有少量[<1字节]的剩余空间.)
FWIW,我估计,对于我想要编码的每个符号,最多需要3位.Python有这种工作的内置工具吗?
没有什么非常方便的内置,但有第三方模块,如bitstring和bitarray专为此设计.
from bitstring import BitArray
s = BitArray('0b11011')
s += '0b100'
s += 'uint:5=9'
s += [0, 1, 1, 0, 1]
...
s.tobytes()
Run Code Online (Sandbox Code Playgroud)
要将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 '
Run Code Online (Sandbox Code Playgroud)
一些相关问题: