将Python字符串转换为其ASCII表示形式

时间:2010-10-03 16:13:36

标签: python

如何将Python中的字符串转换为ASCII十六进制表示符?

示例:我想在'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'中生成001bd47da4f3

5 个答案:

答案 0 :(得分: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

根据martineau的评论,这是Python 3的方式:

>>> "".join(format(ord(c),"02x") for c in text)

答案 1 :(得分:5)

使用python 2.x,您可以将字符串编码为十六进制表示。它不适用于python3.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”)

删除编码之前的那些

答案 2 :(得分: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'
>>>

答案 3 :(得分:2)

这是另一个答案,它应该适用于从3.x到2.0的所有Python版本(根据pyqver的最小版本)。尽管如此,因为它基于一个简单的表(不是字典)查找,它也应该相对较快。

需要一点一次的设置,但是非常简单,并且避免使用在寻求版本独立性的过程中添加(或删除)的任何增强功能。

numerals = "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

答案 4 :(得分:-4)

binascii.hexlify()

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

请参阅@John Machin's answer