我一直有一些真正的麻烦。我在python中收到一串二进制数据,我无法解压缩并只解释数据的5位子集(不是整个字节)。似乎任何想到的方法只是简单地失败了。
假设我有两个字节打包的二进制数据,我想解释16中的前10位。如何将其转换为2个整数,每个代表5位?
答案 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。