Saltar al contenido

Python: extraer bits de un byte

Solución:

El enfoque clásico de verificar si un bit está establecido, es usar el operador binario “y”, es decir

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

Para comprobar si el n ^ o bit está establecido, use la potencia de dos o un cambio de bits mejor

def is_set(x, n):
    return x & 2 ** n != 0 

    # a more bitwise- and performance-friendly version:
    return x & 1 << n != 0

is_set(10, 1) # 1 i.e. first bit - as the count starts at 0-th bit
>>> True

Puede quitar el bit inicial usando una máscara con un AND con un byte del archivo. Eso te dejará con el valor de los bits restantes:

mask =  0b01111111
byte_from_file = 0b10101010
value = mask & byte_from_file
print bin(value)
>> 0b101010
print value
>> 42

Encuentro los números binarios más fáciles de entender que los hexadecimales cuando hago enmascaramiento de bits.

EDITAR: Ejemplo un poco más completo para su caso de uso:

LEADING_BIT_MASK =  0b10000000
VALUE_MASK = 0b01111111

values = [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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *