web-dev-qa-db-fra.com

Comment créer python octets objet à partir d'une longue chaîne hexadécimale?

J'ai une longue séquence de chiffres hexadécimaux dans une chaîne, comme

000000000000484240FA063DE5D0B744ADBED63A81FAEA390000C8428640A43D5005BD44

seulement beaucoup plus longtemps, plusieurs kilo-octets. Existe-t-il un moyen intégré de le convertir en un objet octets dans python 2.6/3?

71
recursive

Fonctionne en Python 2.7 et supérieur, y compris python3:

result = bytearray.fromhex('deadbeef')

Remarque: Il semble y avoir un bogue avec la fonction bytearray.fromhex() dans Python 2.6. La documentation de python.org indique que la fonction accepte une chaîne comme argument, mais lorsqu'elle est appliquée, l'erreur suivante est levée:

>>> bytearray.fromhex('B9 01EF')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: fromhex() argument 1 must be unicode, not str`
69
Jim Garrison
result = bytes.fromhex(some_hex_string)
52
vili

Vous pouvez le faire avec le codec hexadécimal. c'est à dire:

>>> s='000000000000484240FA063DE5D0B744ADBED63A81FAEA390000C8428640A43D5005BD44'
>>> s.decode('hex')
'\x00\x00\x00\x00\x00\x00HB@\xfa\x06=\xe5\xd0\xb7D\xad\xbe\xd6:\x81\xfa\xea9\x00\x00\xc8B\x86@\xa4=P\x05\xbdD'
40
Brian

Essayez le module binascii

from binascii import unhexlify
b = unhexlify(myhexstr)
35
Crescent Fresh
import binascii

binascii.a2b_hex(hex_string)

C'est comme ça que je l'ai fait.

1
JustPlayin