我正在使用Python从UART读取一些字节,
然而Python正在将我的一些字节转换为ascii。这会导致问题,因为我得到错误的小数。
import serial
import time
port = serial.Serial("dev/ttyAMA0",baudrate=115200,timeout=1.0)
while True:
port.write(bytearray([0xAA,0x90,0x3B,0x85]))
answ = port.read(size=8)
print (answ)
我得到的答案是:
b'\xaa\x10\xb1?\x86ff\x85'
但我希望:
b'\xaa\x10\xb1\?\x86\f\f\x85'
问题是ff与f f具有不同的值。
答案 0 :(得分:1)
显示值只是数据的表示。有效ASCII数据将显示ASCII字符,但字节实际为:
>>> answ = b'\xaa\x10\xb1?\x86ff\x85'
>>> for i in answ: print(hex(i))
...
0xaa
0x10
0xb1
0x3f
0x86
0x66
0x66
0x85
这就是你要找的东西吗?
答案 1 :(得分:0)
正如其名称所示,bytearray是一个字节数组。当您收到数据时,您将获得已发送的确切字节,然后存储在answ
变量中。但是,当您打印到屏幕时,python采用ASCII编码,因此任何可打印字符都是打印作为该字符而不是十六进制,但它们实际上与以下代码段显示的相同:
a = b"f"
b = b"\x66"
if a == b:
print("Same")
else:
print("different")
这会打印“相同”,您可以在此处查看:http://ideone.com/6980Ty
查找ascii表,了解如何进行转换。如果您使用的是Linux,请在终端输入man ascii
以查看此内容。