Python: cómo convertir una cadena que contiene bytes hexadecimales en una cadena hexadecimal

Estoy pensando que binascii es el módulo que estoy buscando, pero parece que no puedo obtener los resultados exactos que estoy buscando.

Esto es lo que quiero hacer. Quiero convertir:

>>> s = '356a192b7913b04c54574d18c28d46e6395428ab' >>> print len(s) 40 

a

 >>> hs = '\x35\x6a\x19\x2b\x79\x13\xb0\x4c\x54\x57\x4d\x18\xc2\x8d\x46\xe6\x39\x54\x28\xab' >>> print len(hs) 20 

¿Alguno de los pitonistas sabe de una manera genial (o, francamente, funcional) de hacer esto?

En todas las versiones de Python , puede usar la función binascii.a2b_hex() (también conocida como binascii.unhexlify() ):

 >>> import binascii >>> s = '356a192b7913b04c54574d18c28d46e6395428ab' >>> binascii.a2b_hex(s) '5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab' 

En Python 3.x , puede usar bytes.fromhex(s) .

En Python 2.x , puedes usar el codec hex str-to-str:

 >>> s.decode("hex") '5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab' 

El códec llama internamente a binascii.a2b_hex() .

Con módulo binascii :

 >>> from binascii import unhexlify >>> s = '356a192b7913b04c54574d18c28d46e6395428ab' >>> unhexlify(s) '5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab'