使用Raspi 2 B,我想将串行数据输出到需要以下格式的智能显示器:
\ XHH \ XHH
其中hh表示十六进制值。
串行数据由各种输入组成,我使用以下方法连接:
SERDATA = ("\\x" + COMMAND + "\\x" + OBJECT)
打印SERDATA给出:
\\xhh\\xhh
只是打印“\\ x”会给出一个反斜杠,并且只使用一个转义字符会产生无效的转义错误,正如预期的那样。 我哪里错了?
答案 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'