我有三个十六进制字符串:
hex1 = "e0"
hex2 = "aa"
hex3 = "b0"
string = "\\x"+hex1+"\\x"+hex2+"\\x"+hex3
print string
当我在追加" \ x"之后连接这三个字符串时他们每个人都没有得到它的角色代表。
我输出为\xe0\xaa\xb0
但是当我在一行中定义它时
string = "\xe0\xaa\xb0"
和打印字符串我得到正确的输出ર
我以前的尝试出了什么问题?
答案 0 :(得分:2)
尝试
lst = [
chr(int(hex1, 16)),
chr(int(hex2, 16)),
chr(int(hex3, 16))
]
s = ''.join(lst) # '\xe0\xaa\xb0'
您的方法无效,因为初始字符串"\\x"
被解释为字符串"\x"
- 正如您可能看到的那样,使用单个反斜杠创建初始字符串("\x"
)是无效的。
答案 1 :(得分:0)
Python附带了许多有用的库,并且有一个Python库可以满足您的需求,binascii。 binascii.unhexlify
会将'010203'
之类的十六进制序列转换为字节'\x01\x02\x03'
:
>>> hex1 = "e0"
>>> hex2 = "aa"
>>> hex3 = "b0"
>>> s = hex1+hex2+hex3
>>> import binascii
>>> binascii.unhexlify(s)
'\xe0\xaa\xb0'
甚至有一种方法可以解决您最初尝试做的事情:
>>> hex1 = "e0"
>>> hex2 = "aa"
>>> hex3 = "b0"
>>> s= "\\x"+hex1+"\\x"+hex2+"\\x"+hex3
>>> s.decode('string-escape')
'\xe0\xaa\xb0'