如何连接包含转义字符的文本" \"

时间:2015-04-13 16:17:33

标签: python python-2.7

使用Raspi 2 B,我想将串行数据输出到需要以下格式的智能显示器:
    \ XHH \ XHH
其中hh表示十六进制值。 串行数据由各种输入组成,我使用以下方法连接:

SERDATA = ("\\x" + COMMAND + "\\x" + OBJECT)

打印SERDATA给出:

\\xhh\\xhh

只是打印“\\ x”会给出一个反斜杠,并且只使用一个转义字符会产生无效的转义错误,正如预期的那样。 我哪里错了?

2 个答案:

答案 0 :(得分:3)

你认为你是如何用十六进制代码创建字节的,这是错误的。

SERDATA = (COMMAND + OBJECT).decode('hex')

答案 1 :(得分:1)

你不能像这样制作字节值;虽然您可以使用str.decode('string-escape')来获取结果字符串:

>>> '\\x12\\x13'.decode('string-escape')
'\x12\x13'

这不是推荐的解决方案。相反,更好的解决方案是使用struct.pack代替,使用2个无符号字节作为格式,将值作为整数:

>>> import struct
>>> COMMAND = 0x99
>>> OBJECT = 0x88
>>> SERDATA = struct.pack('=BB', COMMAND, OBJECT)
>>> SERDATA
'\x99\x88'

使用Python 3和字节,一切都会更容易:

>>> COMMAND = 0x88
>>> OBJECT = 0x99
>>> SERDATA = bytes([COMMAND, OBJECT])
>>> SERDATA
b'\x88\x99'
相关问题