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)