简体   繁体   中英

Python: How to convert a string containing hex bytes to a hex string

I'm thinking binascii is the module I'm looking for, but I can't quite seem to get the exact results for which I am looking.

Here's what I want to do. I want to convert:

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

to

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

Any Pythonistas know of a cool (or, frankly, functional) way to do this?

In all versions of Python , you can use the function binascii.a2b_hex() (also known as binascii.unhexlify() ):

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

In Python 3.x , you can use bytes.fromhex(s) .

In Python 2.x , you can use the hex str-to-str codec:

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

The codec internally calls binascii.a2b_hex() .

With binascii module:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM