working with print hexadecimal convertir bytes binascii binario python python-3.x hex

with - ¿Cuál es la forma correcta de convertir bytes a una cadena hexadecimal en Python 3?



python hex to string (6)

Desde Python 3.5 esto ya no es incómodo:

>>> b''/xde/xad/xbe/xef''.hex() ''deadbeef''

y reversa:

>>> bytes.fromhex(''deadbeef'') b''/xde/xad/xbe/xef''

funciona también con el tipo mutable bytearray .

¿Cuál es la forma correcta de convertir bytes a una cadena hexadecimal en Python 3?

Veo reclamos de un método bytes.hex , bytes.decode codecs, y he intentado other funciones posibles de asombro menor sin disponibilidad. ¡Solo quiero mis bytes como hex!


El método binascii.hexlify() convertirá los bytes a bytes representan la cadena hexagonal ascii. Eso significa que cada byte en la entrada se convertirá en dos caracteres ascii. Si quieres un str verdadero, entonces puedes .decode("ascii") el resultado.

Incluí un fragmento que lo ilustra.

import binascii with open("addressbook.bin", "rb") as f: # or any binary file like ''/bin/ls'' in_bytes = f.read() print(in_bytes) # b''/n/x16/n/x04'' hex_bytes = binascii.hexlify(in_bytes) print(hex_bytes) # b''0a160a04'' which is twice as long as in_bytes hex_str = hex_bytes.decode("ascii") print(hex_str) # 0a160a04

de la cadena hexadecimal "0a160a04" para volver a los bytes con binascii.unhexlify("0a160a04") que devuelve b''/n/x16/n/x04''


Python tiene códecs estándar de bytes a bytes que realizan transformaciones convenientes como quoted-printable (se adapta a 7bits ascii), base64 (cabe en alfanuméricos), hex escaping, gzip y bz2 compression. En Python 2, podrías hacer:

b''foo''.encode(''hex'')

En Python 3, str.encode / bytes.decode son estrictamente para conversiones de bytes <-> str. En cambio, puede hacer esto, que funciona en Python 2 y Python 3 ( s / encode / decode / g para el inverso):

import codecs codecs.getencoder(''hex'')(b''foo'')[0]

Comenzando con Python 3.4, hay una opción menos incómoda:

codecs.encode(b''foo'', ''hex'')

Estos códecs misc también son accesibles dentro de sus propios módulos (base64, zlib, bz2, uu, quopri, binascii); la API es menos consistente, pero para códecs de compresión ofrece más control.


Si quiere convertir b ''/ x61'' a 97 o ''0x61'', puede intentar esto:

[python3.5] >>>from struct import * >>>temp=unpack(''B'',b''/x61'')[0] ## convert bytes to unsigned int 97 >>>hex(temp) ##convert int to string which is hexadecimal expression ''0x61''

Referencia: https://docs.python.org/3.5/library/struct.html


Use el módulo binascii :

>>> import binascii >>> binascii.hexlify(''foo''.encode(''utf8'')) b''666f6f'' >>> binascii.unhexlify(_).decode(''utf8'') ''foo''

Ver esta respuesta: Python 3.1.1 string to hex


import codecs codecs.getencoder(''hex_codec'')(b''foo'')[0]

funciona en Python 3.3 (por lo que "hex_codec" en lugar de "hex").