我有三个十六进制字符串:
hex1 = "e0"
hex2 = "aa"
hex3 = "b0"
string = "\x"+hex1+"\x"+hex2+"\x"+hex3
print string
当我在将"\x"附加到每个字符串后连接这三个字符串时,我没有得到它的字符表示。
我得到的输出是xe0xaaxb0
但是当我在一行中定义它时
string = "xe0xaaxb0"
并打印字符串,我得到正确的输出,这是ર
我之前的尝试有什么问题?
尝试
lst = [
chr(int(hex1, 16)),
chr(int(hex2, 16)),
chr(int(hex3, 16))
]
s = ''.join(lst) # 'xe0xaaxb0'
您的方法不起作用,因为初始字符串"\x"
被解释为字符串"x"
- 正如您可能看到的,使用单个反斜杠 ( "x"
) 创建初始字符串是无效的。
Python
附带了很多有用的库,并且有一个 Python 库可以满足你想要的 binascii。 binascii.unhexlify
将十六进制序列(如 '010203'
)转换为字节'x01x02x03'
:
>>> hex1 = "e0"
>>> hex2 = "aa"
>>> hex3 = "b0"
>>> s = hex1+hex2+hex3
>>> import binascii
>>> binascii.unhexlify(s)
'xe0xaaxb0'
甚至还有一种方法可以解决您最初要做的事情:
>>> hex1 = "e0"
>>> hex2 = "aa"
>>> hex3 = "b0"
>>> s= "\x"+hex1+"\x"+hex2+"\x"+hex3
>>> s.decode('string-escape')
'xe0xaaxb0'