简体   繁体   中英

Python: How do I extract specific bits from a byte?

I have a message which reads as 14 09 00 79 3d 00 23 27 . I can extract each byte from this message by calling message[4] , which will give me 3d for example. How do I extract the individual 8 bits from this byte? For example, how would I get bits 24-27 as as single message? How about just bit 28?

To answer the second part of your question, you can get specific bit values using bitwise operations

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

The easiest way to do this is to use the & operator. Convert your message to an int using int(str_msg, 16) . convert int to binary string using bin(myint)

To get bits 4-6 (from left) in a byte:

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

If you want, you can bit shift result using result >> 2 . Obviously you will want to make this more dynamic but this is a dumbed down example.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM