직렬에서 한 번에 한 바이트를 읽고 목록에 저장하는 파이썬 코드를 작업 중입니다.
다음으로 페이로드 길이를 얻기 위해 2 바이트를 결합해야합니다. 이 목표를 달성하려면 MSB (Most Significative byte)와 LSB (Least significative byte) 길이를 정수로 변환 한 다음 MSB를 이동해야합니다.
이것은 내 목록입니다 : [ 'H', '4', 'K', 'M', '0', '\ x10', '\ xff', '\ x10', '\ x00', '\ x02' , '\ xff', '\ xff'].
MSB는 있다 '\ X02' ANS LSB 이다 '\ x00부터'
MSB와 LSB를 두 개의 변수에 저장하고 int ()에 의해 문자열에서 int로 변환하려고했습니다.
payloadLenMSB_h = int(packetHeader[offsetPayloadLenMSB])
payloadLenLSB_h = int(packetHeader[offsetPayloadLenLSB])
하지만이 오류가 발생합니다.
**ValueError: invalid literal for int() with base 10: ''**
어떤 방법으로 길이의 MSB와 LSB를 int로 변환 할 수 있습니까?
다음으로 MSB를 오른쪽으로 8 비트 이동하고 LSB와 결합해야합니다.
어떤 제안?
이것은 직렬에서 데이터를 읽는 코드입니다.
print 'Available data on COM Port: ' + str(availableSerialByte)
if availableSerialByte > 0:
readByte = serialCOM.read(1)
print 'Read COM byte:' + str(readByte)
감사!!!
이렇게해야합니다.
import struct
payloadLenMSB_h = struct.unpack('B', packetHeader[offsetPayloadLenMSB])[0]
payloadLenLSB_h = struct.unpack('B', packetHeader[offsetPayloadLenLSB])[0]
payloadLen = payloadLenMSB_h << 8 + payloadLenLSB_h
'B'
나타내고 단일 문자 부호는 참조 구조체 오피스 . <<
비트 이동을 의미합니다. MSB가 이동되면 간단히 LSB에 추가 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다