最“Pythonic”翻译方式是什么
'\xff\xab\x12'
到
'ffab12'
我查找了可以执行此操作的函数,但它们都希望转换为ASCII('\x40'
到'a'
)。我想要ASCII中的十六进制数字。
答案 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