将Python字符串转换为ASCII表示

6 投票
5 回答
13396 浏览
提问于 2025-04-16 04:56

我想知道怎么把Python中的字符串转换成它的ASCII十六进制表示。

举个例子:我想把这个结果 '\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 转换成 001bd47da4f3

5 个回答

4

替代方案:

[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'
>>>
5

在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") 把它们去掉。

6
>>> 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)

根据martineau的评论,这里是Python 3的写法:

撰写回答