Je suis en train de convertir du code cython en python, et cela s'est bien passé jusqu'à ce que j'arrive aux opérations au niveau du bit. Voici un extrait du code:
TypeError: unsupported operand type(s) for >>=: 'str' and 'int'
Si je l'exécute, il crachera cette erreur:
in_buf_word = b'\xff\xff\xff\xff\x00' bits = 8 in_buf_word >>= bits
comment puis-je résoudre ce problème ?
3 Réponses :
Décaler vers la droite de 8 bits signifie simplement couper l'octet le plus à droite.
Puisque vous avez déjà un objet bytes
, cela peut être fait plus facilement:
in_buf_word = in_buf_word[:-1]
Vous pouvez le faire en convertissant les octets en un entier, en le décalant, puis en reconvertissant le résultat en une chaîne d'octets.
in_buf_word = b'\xff\xff\xff\xff\x00' bits = 8 print(in_buf_word) # -> b'\xff\xff\xff\xff\x00' temp = int.from_bytes(in_buf_word, byteorder='big') >> bits in_buf_word = temp.to_bytes(len(in_buf_word), byteorder='big') print(in_buf_word) # -> b'\x00\xff\xff\xff\xff'
print(in_buf_word.tobytes())
comment le reconvertirais-je en octets?
@EmilBengtsson utilise tobytes (). voir la réponse modifiée par exemple
Quel est votre résultat attendu pour cela? Est-ce que
8
est un montant fixe, ou peut-il être2
,29
,33
ou- 1
?bits n'est pas un montant fixe, mais dans mon cas, il est généralement de 8, mais in_buf_word est ce qui serait en quelque sorte dynamique.