Python: extraire des bits d'un octet
Je suis en train de lire un fichier binaire en python et la documentation pour le format de fichier dit:
Drapeau (en binaire)Sens
1 nnn nnnn Indique qu'il y a un octet de données à suivre
c'est à dupliquer nnn nnnn (127 maximum)
fois.0 nnn nnnn Indique qu'il y a nnn nnnn octets de l'image
les données à suivre (127 octets maximum) et que
il n'existe pas de duplications.n 000 0000 de Fin de ligne de champ. Indique la fin d'une ligne
record. La valeur de n peut être zéro ou un.
Notez que la fin de la ligne de champ est obligatoire et
qu'il est reflété dans la longueur de la ligne d'enregistrement
champs mentionnés ci-dessus.
Lors de la lecture du fichier que j'attends de l'octet, je suis à retourner 1 nnn nnnn
où la nnn nnnn
partie devrait être de 50.
J'ai été capable de faire cela en utilisant les suivantes:
flag = byte >> 7
numbytes = int(bin(byte)[3:], 2)
Mais la numbytes calcul se sent comme un bon marché une solution de contournement.
Puis-je faire de plus peu de math pour réaliser le calcul de numbytes?
Comment voulez-vous cette approche?
source d'informationauteur Evan Borgstrom
Vous devez vous connecter pour publier un commentaire.
Vous pouvez enlever le premier bit à l'aide d'un masque ANDed avec un octet à partir d'un fichier. Que vous laisse avec la valeur des bits restants:
- Je trouver les nombres binaires plus facile à comprendre que hex lors de bits de masquage.
EDIT: Légèrement exemple plus complet pour votre cas d'utilisation:
L'approche classique de vérifier si un bit est défini, est d'utiliser les binaires "et" opérateur, c'est à dire
De vérifier, si n^ième bit est défini, utilisez la puissance de deux, c'est à dire
Si j'ai lu votre description correctement:
pas sûr que je suis vous correctement, mais si je le faisais, cela devrait faire l'affaire:
Vous pouvez le faire comme ceci:
là vous allez:
Au lieu de int(bin(byte)[3:], 2), vous pouvez simplement utiliser: int(bin(byte>>1),2)