将十六进制值转换为ASCII

时间:2016-06-20 09:59:37

标签: python string python-2.7

最“Pythonic”翻译方式是什么

'\xff\xab\x12'

'ffab12'

我查找了可以执行此操作的函数,但它们都希望转换为ASCII('\x40''a')。我想要ASCII中的十六进制数字。

2 个答案:

答案 0 :(得分:5)

有一个名为binascii的模块,其中包含以下功能:

>>> import binascii
>>> binascii.hexlify('\xff\xab\x12')
'ffab12'
>>> binascii.unhexlify('ffab12')
'\xff\xab\x12'

答案 1 :(得分:0)

original = '\xff\xab\x12'
result = original.replace('\\x', '')
print result

它是\x,因为它被转义了。 a.replace(b,c)只会将b中所有出现的c替换为a

你想要的不是ascii,因为ascii将0x41翻译为' A'。您只需要十六进制基数而不需要\ x(或者在某些情况下为0x)

编辑!!
对不起,我以为\ x被转义了。因此,\ x后跟2个十六进制数字表示单个字符,而不是4 ..

print "\x41"

将打印

  

A

所以我们要做的就是将每个char转换为hex,然后将其打印出来:

res = ""
for i in original:
   res += hex(ord(i))[2:].zfill(2)
print res

现在让我们来看看这一行:

hex(ord(i))[2:]

ord(c) - 返回char c的数值 hex(i) - 返回int i的十六进制字符串值(例如,如果i=65它将返回0x41
[2:] - 削减" 0x"十六进制字符串前缀。
.zfill(2) - 用零填充

因此,使用列表理解来实现这一目标会更短:

result = "".join([hex(ord(c))[2:].zfill(2) for c in original])
print result