O Python possui codecs padrão de bytes em bytes que executam transformações convenientes como quoted-printable (cabe em 7bits ascii), base64 (cabe em alfanuméricos), escape hexadecimal, compressão gzip e bz2. No Python 2, você pode fazer:
b'foo'.encode('hex')
No Python 3, str.encode
/ bytes.decode
são estritamente para conversões de bytes <-> str. Em vez disso, você pode fazer isso, que funciona no Python 2 e Python 3 ( s / encode / decode / g para o inverso):
import codecs
codecs.getencoder('hex')(b'foo')[0]
Começando com o Python 3.4, existe uma opção menos complicada:
codecs.encode(b'foo', 'hex')
Esses codecs variados também são acessíveis dentro de seus próprios módulos (base64, zlib, bz2, uu, quopri, binascii); a API é menos consistente, mas para codecs de compactação oferece mais controle.