Python:如何从字节中提取特定位?

时间:2017-07-20 17:01:10

标签: python python-3.x

我的消息显示为14 09 00 79 3d 00 23 27。我可以通过调用message[4]来提取此消息中的每个字节,例如,它会给我3d。如何从该字节中提取单个8位?例如,我如何获得24-27位作为单个消息?第28位怎么样?

2 个答案:

答案 0 :(得分:11)

要回答问题的第二部分,您可以使用按位运算获取特定的位值

# getting your message as int
i = int("140900793d002327", 16)
# getting bit at position 28 (counting from 0 from right)
i >> 28 & 1
# getting bits at position 24-27
bin(i >> 24 & 0b111)

答案 1 :(得分:1)

最简单的方法是使用&运营商。使用int(str_msg, 16)将消息转换为int。使用bin(myint)

将int转换为二进制字符串

从字节中获取4-6位(左起):

>> msg = int("10110111", 2) # or 0b10110111
>> extractor = int("00011100", 2) # or 0b10110111
>> result = msg & extractor
>> print bin(result)
00010100

如果需要,可以使用result >> 2对结果进行位移。显然你会想要让它变得更有活力,但这是一个愚蠢的例子。