将转义符连接到字符串Python

2024-09-30 20:29:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将一个十六进制数字hh与\x连接起来,生成一个字符串“\xhh”,然后将其放入一个列表中并将其转换为一个长字符串。下面是我当前的代码,这会引发一个错误:

ValueError: invalid \x escape

我不相信这是我的错,因为我不知道该怎么做。我在想,像“\”+“x”+hh这样的东西行吗?还有没有更有效的方法?在

以下是导致错误时的代码: (注意-电压、电流和校验和值不同。我只是为这个添加了示例值)

voltValues = [30, 30, 30]
currValues = [30, 30, 30]
checksumValues = [39, 33]
v1 = "\x" + voltValues[0]
v2 = "\x" + voltValues[1]
v3 = "\x" + voltValues[2]
c1 = "\x" + currValues[0]
c2 = "\x" + currValues[1]
c3 = "\x" + currValues[2]
cs1 = "\x" + checksumValues[0]
cs2 = "\x" + checksumValues[1]

list = [ "\x01", "\x30", "\x53", v1, v2, v3, c1, c2, c3, "\x46", "\x46", "\x46", "\x30", "\x30", "\x30", "\x32", "\x46", "\x46", cs1, cs2, "\x0D" ]
return ''.join(list)

我希望它返回“\x01\x30\x53\x30\x30\x30\x30\x30\x30\x30\x30\x30\x46\x46\x46\x30\x30\x30\x32\x46\x46\x39\x33\x0D”。在


Tags: 字符串代码hh错误v3v2v1c2
3条回答

您可以通过说int(s, 16)将每个两个字符的十六进制代码s转换为整数,并使用{}将其进一步转换为字符,从而缩短整个过程。例如,chr(int('4A', 16))返回'J'。您尝试的'\x'连接失败,因为在解释器读取时,\xAA等十六进制代码在Python代码本身中被解释为文本。在

但是顺便说一句,你的程序中的伏特值不是用十六进制表示的。或者像绳子一样。以下都给出了相同的结果:

v = 0x4A   # the proper way to write int literals in hex
print chr(v)

v = 74     # without the 0x, this is interpreted as decimal
print chr(v)

v = '4A'   # in quotes, it can be anything you like, but then you need int(v,16)
print chr(int(v, 16))

按照当前的方式,Python正在创建一个值为“\x”的字符串,然后尝试向其中添加30(这将失败,因为这将连接str和int)。在

你想做的事情是这样的:

v1 = chr(int(str(voltValues[0]), 16))

这将首先从值中生成一个字符串,以便int()可以解析它。然后解析这个以16为基数的字符串(它将其解析为十六进制数据)。之后,它将创建一个字符串,该字符串的编码是您刚刚创建的整数。这意味着,例如

^{pr2}$

您需要查看chr内置函数。在

v1 = chr(voltValues[0])

将v1设置为'\x1e'。在

如果您希望它是十六进制的,那么将voltValues[0]设置为0x30将得到'0'的v1。在

相关问题 更多 >