Python:将点分隔的十六进制值转换为字符串?

时间:2012-09-03 11:24:44

标签: python string python-2.7 hex data-conversion

在这篇文章中:Print a string as hex bytes?我学会了如何将字符串打印成十六进制字节的“数组”,现在我需要另外一些方法:

例如,输入为:73.69.67.6e.61.74.75.72.65,输出为字符串。

3 个答案:

答案 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'
>>>