Comment utiliser l'encodage ' hex ' en Python 3.2 ou supérieur?

en Python 2, pour obtenir une représentation de chaîne de caractères des chiffres hexadécimaux dans une chaîne de caractères, vous pouvez faire

>>> '\x12\x34\x56\x78'.encode('hex')
'12345678'

en Python 3, cela ne fonctionne plus (testé sur Python 3.2 et 3.3):

>>> '\x12\x34\x56\x78'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex

au moins réponse ici sur ainsi que cela mentionne que le hex codec a été supprimé dans Python 3. Mais alors, selon le docs, il a été réintroduit en Python 3.2, comme un "octets-à-octets de cartographie".

Cependant, Je ne sais pas comment obtenir ces "octets-à-octets mappings":

>>> b'\x12'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'

et le docs ne le mentionne pas non plus (du moins pas là où j'ai regardé). Je dois rater quelque chose de simple, mais je ne vois pas ce que c'est.

25
demandé sur Community 2012-10-16 18:40:54
la source

4 ответов

Vous avez besoin de passer par l' codecs module et le hex_codec codec (ou de ses hex alias si disponible*):

codecs.encode(b'\x12', 'hex_codec')

* à Partir de la documentation: "Modifié dans la version 3.4: la Restauration de l'alias pour le binaire transforme".

27
répondu ecatmur 2014-06-02 19:00:54
la source

Encore une autre façon d'utiliser binascii.hexlify():

>>> import binascii
>>> binascii.hexlify(b'\x12\x34\x56\x78')
b'12345678'
13
répondu Mark Tolonen 2013-11-01 03:08:49
la source

en utilisant base64.b16encode():

>>> import base64
>>> base64.b16encode(b'\x12\x34\x56\x78')
b'12345678'
8
répondu dan04 2013-11-01 02:51:05
la source

binascii méthodes sont plus facile par la route:

>>> import binascii
>>> x=b'test'
>>> x=binascii.hexlify(x)
>>> x
b'74657374'
>>> y=str(x,'ascii')
>>> y
'74657374'
>>> x=binascii.unhexlify(x)
>>> x
b'test'
>>> y=str(x,'ascii')
>>> y
'test'
6
répondu iMagur 2014-09-09 16:49:27
la source

Autres questions sur