解释Packed Binary Data Python中的5bit子集

时间:2012-06-18 14:49:21

标签: python binary

我一直有一些真正的麻烦。我在python中收到一串二进制数据,我无法解压缩并只解释数据的5位子集(不是整个字节)。似乎任何想到的方法只是简单地失败了。

假设我有两个字节打包的二进制数据,我想解释16中的前10位。如何将其转换为2个整数,每个代表5位?

1 个答案:

答案 0 :(得分:3)

使用位掩码和位移:

>>> example = 0x1234   # Hexadecimal example; 2 bytes, 4660 decimal.
>>> bin(example)       # Show as binary digits
'0b1001000110100'
>>> example & 31       # Grab 5 most significant bits
20
>>> bin(example & 31)  # Same, now represented as binary digits
'0b10100'
>>> (example >> 5) & 31 # Grab the next 5 bits (shift right 5 times first)
17
>>> bin(example >> 5 & 31)
'0b10001'

这里的技巧是知道31是一个5位的位掩码:

>>> bin(31)
'0b11111'
>>> 0b11111
31
>>> example & 0b11111
20

如您所见,如果您发现更容易使用,也可以使用0b二进制数字文字表示法。

有关更多背景信息,请参阅Python Wiki on bit manipulation