在这篇文章中:Print a string as hex bytes?我学会了如何将字符串打印成十六进制字节的“数组”,现在我需要另外一些方法:
例如,输入为:73.69.67.6e.61.74.75.72.65
,输出为字符串。
答案 0 :(得分:3)
您可以使用内置的binascii
模块。但请注意,此功能仅适用于ASCII编码字符。
binascii.unhexlify(hexstr)
然而,您的输入字符串需要无点,但使用简单的
就可以轻松实现string = string.replace('.','')
另一种(可以说是更安全的)方法是以下列方式使用base64:
import base64
encoded = base64.b16encode(b'data to be encoded')
print (encoded)
data = base64.b16decode(encoded)
print (data)
或在您的示例中:
data = base64.b16decode(b"7369676e6174757265", True)
print (data.decode("utf-8"))
在输入b16decode
方法之前,可以对字符串进行清理。
请注意,我使用的是python 3.2,您可能不一定需要字符串前面的b
来表示字节。
示例是found here
答案 1 :(得分:2)
没有binascii
:
>>> a="73.69.67.6e.61.74.75.72.65"
>>> "".join(chr(int(e, 16)) for e in a.split('.'))
'signature'
>>>
或更好:
>>> a="73.69.67.6e.61.74.75.72.65"
>>> "".join(e.decode('hex') for e in a.split('.'))
PS:与unicode一起使用:
>>> a='.'.join(x.encode('hex') for x in 'Hellö Wörld!')
>>> a
'48.65.6c.6c.94.20.57.94.72.6c.64.21'
>>> print "".join(e.decode('hex') for e in a.split('.'))
Hellö Wörld!
>>>
修改强>
这里不需要生成器表达式(thx到thg435):
a.replace('.', '').decode('hex')
答案 2 :(得分:1)
使用string split获取字符串列表,然后base 16 for decoding字节。
>>> inp="73.69.67.6e.61.74.75.72.65"
>>> ''.join((chr(int(i,16)) for i in inp.split('.')))
'signature'
>>>