2

一段时间以来,我一直遇到一些真正的麻烦。我在 python 中接收到一串二进制数据,我无法解包和解释数据的 5 位子集(不是整个字节)。似乎想到的任何方法都只是惨败。

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

4

1 回答 1

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 。

于 2012-06-18T14:52:38.707 回答