0
Parserial로 내 Arduino에서 보낸 데이터를 압축 해제하려고합니다. 이 코드는 Python 2.7에서 작동하지만 Python 3.4에서는 동일한 코드가 실패합니다. 이유는 모르겠습니다. 이것은 코드입니다.바이트 압축 해제 : 파이썬 2와 3의 차이
temp=struct.unpack('<'+'h'*int(datalength/2),data)
struct.error: unpack requires a bytes object of length 36
내가 무슨 일이 일어나고 있는지 볼 수 resp
, datalength
및 data
을 인쇄 :
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)
이
파이썬 3.4의 결과 오류입니다.Resp: b'$'
Datalength: 36
Data: b'M>\x06l\xf6\xff\x00\x00\x14\x00w'
전체 응답을 얻으려면, 내가
ser.readline()
을했고, 그것은 반환 : 3
이
b'$M>\x06l\xab\xff\x13\x00O\x00b'
사람이 Py3 대 Py2에 .unpacking
과정에 대한 차이를 설명 할 수 이유는 Py2에서 작동하지? 그 전혀 도움이된다면
'.read (size)'는 ** 최대 ** size' 바이트까지 읽으려고합니다. 아마도 실제로 많은 바이트를받을 때까지 반복 할 필요가 있을까요? –
무슨 소리 야? 대신'.read (size + 1)'을 할 수 있을까요? – aseylys
'len (data)