【发布时间】:2020-11-04 18:29:06
【问题描述】:
我正在使用 2.7 上的一些旧 Python 代码,通过 python 串行库向 FTDI 设备发送和接收数据。
例如,十六进制数据以字节文字字符串转义发送
ser.write(b"\x02\x27\x01") 以类似的格式返回响应。
我有一个计算密码的函数,我需要以字符串格式发送响应。 b"\xnn" 其中 nn 是十六进制值。
因此尝试以以下方式制作响应(代码是现有程序的一部分),这是失败的
在哪里
high = 0x54
low = 0xd3
key_answer="\x04\x27\x02"+chr(int(high)).encode('latin1')+chr(int(low)).encode('latin1')
它失败了:
Message='ascii' codec can't decode byte 0xd3 in position 0: ordinal not in range(128)
如果我只使用 chr() 函数,我会得到
"\x04'\x02**T**\xd3" 其中高值应该是 \x54 而不是字符 T。
所以问题是:如何强制将十六进制值的格式从 0a54 格式转换为字符串文字 '\x54'?
【问题讨论】:
-
Python 2.7 尝试“提供帮助”并将字节转换为字符串,反之亦然。它使用 ASCII 编解码器来做到这一点,这几乎总是错误的选择。要解决此问题,请在使用字节和字符串方面保持一致。
chr(x)创建一个字符串。
标签: python python-2.7 pyserial