我想将一个十六进制数字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”。在
您可以通过说}将其进一步转换为字符,从而缩短整个过程。例如,
int(s, 16)
将每个两个字符的十六进制代码s
转换为整数,并使用{chr(int('4A', 16))
返回'J'
。您尝试的'\x'
连接失败,因为在解释器读取时,\xAA
等十六进制代码在Python代码本身中被解释为文本。在但是顺便说一句,你的程序中的伏特值不是用十六进制表示的。或者像绳子一样。以下都给出了相同的结果:
按照当前的方式,Python正在创建一个值为“\x”的字符串,然后尝试向其中添加30(这将失败,因为这将连接str和int)。在
你想做的事情是这样的:
这将首先从值中生成一个字符串,以便int()可以解析它。然后解析这个以16为基数的字符串(它将其解析为十六进制数据)。之后,它将创建一个字符串,该字符串的编码是您刚刚创建的整数。这意味着,例如
^{pr2}$您需要查看chr内置函数。在
将v1设置为'\x1e'。在
如果您希望它是十六进制的,那么将voltValues[0]设置为0x30将得到
'0'
的v1。在相关问题 更多 >
编程相关推荐