关于错误消息ValueError: invalid x escape
的帖子,但是,尽管这是一个简单的问题,但我仍然卡住了。我正在尝试用不同的构建块构建一条字节串。最后,它必须看起来像:
b'Khx10x10x10'
所以开头有两个 ASCII 符号和三个十六进制值。我已经有K
(来自dict_birdnumbers[int(birdname)]
(和'10'
(finangle
(作为变量。我尝试使用原始文本字符串
hex = r'x'
line3 = dict_birdnumbers[int(birdname)] + 'h' + hex + finangle + hex + finangle + hex + finangle
print(line3.encode())
我使用.encode()
来确保它是一个字节串。但是,我得到的结果是
b'Kh\x10\x10\x10'
所以一个反斜杠太多了。如果我删除hex
中的反斜杠,我只会得到b'Khx10x10x10'
.如果我使用像hex = 'x'
这样的普通字符串,我会收到错误消息ValueError: invalid x escape
.我能做什么?
xhh
是一个符号;每个xhh
序列创建一个字符。您不能连接x
和两个十六进制数字以获得相同的效果。
相反,只需将整数序列传递给bytes()
:
finagle = int(finangle, 16) # assuming finagle is a hex notation string
line3 = b'%sh%s' % (
dict_birdnumbers[int(birdname)].encode('ascii'),
bytes([finangle, finangle, finangle])
)
这将创建一个具有 3 个字节的 bytes
对象,每个字节的整数值为 16,十六进制值为 10。bytes
的repr()
输出恰好使用 xhh
来显示此类字节,因为替代方案并非真正可打印(这是针对所有不可打印的字节值,即可打印 ASCII 范围之外的值(:
>>> bytes([0x10, 0x10, 0x10]) # 3 integers using hex syntax
b'x10x10x10'