2012-05-30 22 views
14

Myślę, że binascii jest modułem, którego szukam, ale nie mogę uzyskać dokładnych wyników, na które patrzę.Python: Jak przekonwertować ciąg zawierający bajty szesnastkowe na łańcuch szesnastkowy?

Oto, co chcę zrobić. Chcę przekonwertować:

>>> s = '356a192b7913b04c54574d18c28d46e6395428ab' 
>>> print len(s) 
40 

do

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

Wszelkie Pythonistas wiedzieć o chłodzie (lub, mówiąc, funkcjonalna) sposób to zrobić?

Odpowiedz

18

Najprostszym rozwiązaniem w Pythonie 2.x:

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

Druga linia odpowiada

binascii.a2b_hex(s) 
+0

Tak, to jest dokładnie to, czego szukałem na, i to było w klasie ciągów czekających na mnie. Dzięki, Sven! –

3

Z binascii modułu:

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

'unhexlify()' to tylko inna nazwa dla 'a2b_hex()' [binascii Documentation] (https://docs.python.org/2/library/binascii.html#binascii.a2b_hex) – Murmel