如何将Python中的字符串转换为其ASCII十六进制表示形式?
示例: 我想要将'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
转换为 001bd47da4f3
。
如何将Python中的字符串转换为其ASCII十六进制表示形式?
示例: 我想要将'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
转换为 001bd47da4f3
。
>>> text = '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'.rstrip('\0')
>>> print "".join("%02x" % ord(c) for c in text)
001bd47da4f3
>>> "".join(format(ord(c),"02x") for c in text)
在Python 2.x中,您可以将字符串编码为其十六进制表示。但是,在Python 3.x中,这种方法将不再适用。
>>> print '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'.encode("hex")
'001bd47da4f300000000000000000000'
目前还不清楚您是否有一个包含转义字符的字符串(基本上是r'\x00\x1b'等等),也不清楚为什么您不希望尾随的零存在,但您可以在编码之前使用.rstrip("\x00")来删除这些字符。
替代方案:
[Python 2.7]
>>> data = '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> import binascii
>>> binascii.b2a_hex(data.rstrip('\x00'))
'001bd47da4f3'
>>>
[Python 3.1.2]
>>> data = b'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> import binascii
>>> binascii.b2a_hex(data.rstrip(b'\x00'))
b'001bd47da4f3'
>>>
hexlify()
是一个“合适”的混成词,或者只是看起来很傻,它确实是binascii
模块中同一函数的两个名称之一——因此显然其他人也认为它是一个更具描述性或可读性的名称。 - martineaunumerals = "0123456789abcdef"
hexadecimal = [i+j for i in numerals for j in numerals]
text = '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
print ''.join([hexadecimal[ord(c)] for c in text.rstrip('\0')])
# 001bd47da4f3
import binascii
byte_string = '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
print binascii.hexlify(byte_string.rstrip('\x00'))
# -> 001bd47da4f3
print "".join(format(ord(c),"02x") for c in text)
,这样至少可以使它从2.6到3.x工作,我不会收回+1,因为它很接近。;-) - martineau"".join(format(ord(c),"02x") for c in text)
版本都应该可以工作。 - martineau