我试图用Pyserial解压缩从我的Arduino发来的数据。该代码适用于Python 2.7但是,相同的代码在Python 3.4上失败,我不知道为什么。这是代码。
resp=ser.read()
datalength=struct.unpack('<b',resp)[0]
data=ser.read(datalength)
temp = struct.unpack('<'+'h'*int(datalength/2),data)
ser.flushInput()
ser.flushOutput()
print(temp)
这是Python 3.4中的结果错误:
temp=struct.unpack('<'+'h'*int(datalength/2),data)
struct.error: unpack requires a bytes object of length 36
我打印出resp
,datalength
和data
,看看发生了什么。
Resp: b'$'
Datalength: 36
Data: b'M>\x06l\xf6\xff\x00\x00\x14\x00w'
为了获得完整的回复,我做了ser.readline()
并返回了:
b'$M>\x06l\xab\xff\x13\x00O\x00b'
有人可以解释Py2与Py3中.unpacking
进程的区别以及为什么它在Py2而不是3上运行?
我尝试解析Multiwii中的数据,如果有帮助的话,所有的Multwii解析都在Py2而不是3 ......
答案 0 :(得分:0)
这不是Python版本的结果。这很可能是因为read()
没有等待所有数据(显然是36个字节)到达的时间。尝试增加串行对象的超时参数,看看是否有任何变化,如下所示:
ser = serial.Serial(port, baud, timeout=2)
单位为秒。