在这篇文章中:将字符串打印为十六进制字节?我学会了如何将字符串打印到十六进制字节的“数组”中,现在我需要一些相反的东西:
因此,例如输入将是:73.69.67.6e.61.74.75.72.65
输出将是一个字符串。
在这篇文章中:将字符串打印为十六进制字节?我学会了如何将字符串打印到十六进制字节的“数组”中,现在我需要一些相反的东西:
因此,例如输入将是:73.69.67.6e.61.74.75.72.65
输出将是一个字符串。
您可以使用内置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
字符串前面的 out 来表示字节。
示例在这里找到
没有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 to thg435):
a.replace('.', '').decode('hex')
使用string split来获取字符串列表,然后使用base 16 来解码字节。
>>> inp="73.69.67.6e.61.74.75.72.65"
>>> ''.join((chr(int(i,16)) for i in inp.split('.')))
'signature'
>>>