Python: Extracting bits from a byte Python: Extracting bits from a byte python python

Python: Extracting bits from a byte


The classic approach of checking whether a bit is set, is to use binary "and" operator, i.e.

x = 10 # 1010 in binaryif x & 0b10:  # explicitly: x & 0b0010 != 0    print('First bit is set')

To check, whether n^th bit is set, use the power of two, or better bit shifting

def is_set(x, n):    return x & 2 ** n != 0     # a more bitwise- and performance-friendly version:    return x & 1 << n != 0is_set(10, 1) # 1 i.e. first bit - as the count starts at 0-th bit>>> True


You can strip off the leading bit using a mask ANDed with a byte from file. That will leave you with the value of the remaining bits:

mask =  0b01111111byte_from_file = 0b10101010value = mask & byte_from_fileprint bin(value)>> 0b101010print value>> 42

I find the binary numbers easier to understand than hex when doing bit-masking.

EDIT: Slightly more complete example for your use case:

LEADING_BIT_MASK =  0b10000000VALUE_MASK = 0b01111111values = [0b10101010, 0b01010101, 0b0000000, 0b10000000]for v in values:    value = v & VALUE_MASK    has_leading_bit = v & LEADING_BIT_MASK    if value == 0:        print "EOL"    elif has_leading_bit:        print "leading one", value    elif not has_leading_bit:        print "leading zero", value


If I read your description correctly:

if (byte & 0x80) != 0:    num_bytes = byte & 0x7F