Tengo una secuencia larga de dígitos hexadecimales en una cadena, como
000000000000484240FA063DE5D0B744ADBED63A81FAEA390000C8428640A43D5005BD44
solo mucho más, varios kilobytes. ¿Hay alguna forma incorporada de convertir esto en un objeto de bytes en Python 2.6 / 3?
Respuestas:
Funciona en Python 2.7 y superior, incluido python3:
result = bytearray.fromhex('deadbeef')
Nota: parece haber un error con la
bytearray.fromhex()
función en Python 2.6. La documentación de python.org indica que la función acepta una cadena como argumento, pero cuando se aplica, se produce el siguiente error:>>> bytearray.fromhex('B9 01EF') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: fromhex() argument 1 must be unicode, not str`
fuente
bytes(bytearray.fromhex('deadbeef'))
binascii.unhexlify()
.fuente
Puede hacer esto con el códec hexadecimal. es decir:
>>> 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'
fuente
codecs.decode('0a0a0a', 'hex_codec')
debería funcionar para 2.xy 3.x :-)Prueba el módulo binascii
from binascii import unhexlify b = unhexlify(myhexstr)
fuente
unhexlify
ahora no aceptará una cadena, sino solo bytes. Realmente bastante tonto, pero significa que necesitarías usarlob = unhexlify(bytes(myhexstr, 'utf-8'))
import binascii binascii.a2b_hex(hex_string)
Así es como lo hice.
fuente
import binascii binascii.b2a_hex(obj)
fuente