82 votes

Python 3.1.1 chaîne en hexadécimal

J'essaie d'utiliser str.encode() mais je reçois

 >>> "hello".encode(hex)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be string, not builtin_function_or_method
 

J'ai essayé de nombreuses variantes et elles semblent toutes fonctionner dans Python 2.5.2. Que dois-je faire pour les faire fonctionner dans Python 3.1?

107voto

Ignacio Vazquez-Abrams Points 312628

Le codec hex a été inséré dans la version 3.x. Utilisez binascii place:

 >>> binascii.hexlify(b'hello')
b'68656c6c6f'
 

26voto

Mark Byers Points 318575

Vous avez déjà eu quelques bonnes réponses, mais j'ai pensé que vous pourriez être intéressé par un peu de l'arrière-plan, trop.

Tout d'abord il vous manque les guillemets. Il devrait être:

"hello".encode("hex")

Deuxièmement ce codec n'a pas été porté à Python 3.1. Voir ici. Il semble qu'ils n'ont pas encore décidé si oui ou non ces codecs doivent être inclus dans Python 3 ou mis en œuvre d'une manière différente.

Si vous regardez les diff fichier attaché à ce bug, vous pouvez voir la méthode proposée de mise en œuvre:

import binascii
output = binascii.b2a_hex(input)

24voto

iMagur Points 113

les méthodes binascii sont plus faciles d'ailleurs

 >>> 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'
 

J'espère que ça aide. :)

8voto

Gabriel Points 301

base64.b16encode et base64.b16decode convertit les octets vers et depuis l'hexagone et fonctionne dans toutes les versions de Python. L’ approche des codecs fonctionne également, mais est moins simple en Python 3.

3voto

Ofir Points 5760

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X