如何将Python中的字符串转换为ASCII十六进制表示符?
示例:我想在'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
中生成001bd47da4f3
。
答案 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)
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