2012-05-30 18 views
14

Sto pensando che binascii è il modulo che sto cercando, ma non riesco a ottenere i risultati esatti per i quali sto cercando.Python: Come convertire una stringa contenente byte esadecimali in una stringa esadecimale

Ecco cosa voglio fare. Voglio convertire:

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

Qualsiasi Pythonisti conoscenza di un luogo fresco (o, francamente, funzionale) modo per fare questo?

risposta

18

soluzione più semplice in Python 2.x:

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

La seconda linea è equivalente a

binascii.a2b_hex(s) 
+0

Sì, questo è esattamente quello che stavo cercando per, ed era nella classe di corda che mi aspettava. Grazie, Sven! –

3

Con binascii modulo:

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

'unhexlify()' è solo un altro nome per 'a2b_hex()' [documentazione binascii] (https://docs.python.org/2/library/binascii.html#binascii.a2b_hex) – Murmel

Problemi correlati