Я пытаюсь распаковать данные, отправленные с моего Arduino с Pyserial. Однако код работает на Python 2.7, тот же код выходит из строя на Python 3.4, и я понятия не имею, почему. Это код.Распаковка байтов: разница в Python 2 vs 3
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'
Может кто-нибудь объяснить разницу на .unpacking
процесса в py2 против PY3 и почему она работает на py2 и не 3?
Я пытаюсь разобрать данные из моего MultiWii, если это помогает вообще, все Multwii разбирает в py2 и не 3 ....
Обратите внимание, что '.read (size)' пытается прочитать ** до ** 'size' байт. Возможно, вам просто нужно повторить, пока вы на самом деле не получили столько байтов? –
Что это значит? Мог ли я сделать '.read (size + 1)' вместо этого? – aseylys
'while len (data)