Python tiene códecs estándar de bytes a bytes que realizan transformaciones convenientes como imprimible entre comillas (encaja en 7 bits ascii), base64 (encaja en alfanuméricos), escape hexadecimal, compresión gzip y bz2. En Python 2, podrías hacer:
b'foo'.encode('hex')
En Python 3, str.encode
/ bytes.decode
son estrictamente para conversiones 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 misceláneos también son accesibles dentro de sus propios módulos (base64, zlib, bz2, uu, quopri, binascii); la API es menos consistente, pero para los códecs de compresión ofrece más control.