0

在这篇文章中:将字符串打印为十六进制字节?我学会了如何将字符串打印到十六进制字节的“数组”中,现在我需要一些相反的东西:

因此,例如输入将是:73.69.67.6e.61.74.75.72.65输出将是一个字符串。

4

3 回答 3

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字符串前面的 out 来表示字节。

示例在这里找到

于 2012-09-03T11:28:39.963 回答
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 to thg435):

a.replace('.', '').decode('hex')
于 2012-09-03T11:30:41.367 回答
1

使用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'
>>> 
于 2012-09-03T11:35:07.053 回答