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

问题描述 投票:0回答:3

我有一条消息,内容为

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

python python-3.x
3个回答
47
投票

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

# 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)

5
投票

最简单的方法是使用 & 运算符。使用

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
对结果进行位移位。显然,您希望使其更加动态,但这是一个简单的示例。


0
投票

您可以使用ReverseBox
例如,如果您想从 number 2273 获取 位置 5 上的 3 位,您可以编写如下内容:

from reversebox.io_files.bytes_helper_functions import get_bits
result = get_bits(2273, 3, 5)
print(result)

结果:

7
© www.soinside.com 2019 - 2024. All rights reserved.