我处理python代码,它从串行读取一个字节并将其存储到列表中。
接下来,我需要组合两个字节来获取有效负载长度。为了实现这个目标,我需要将长度的MSB(最有意义字节)和LSB(最低有效字节)转换为整数,然后移位MSB。
这是我的清单:['H','4','K','M','0','\ x10','\ xff','\ x10','\ x00',' \ x02','\ xff','\ xff']。
MSB '\ x02' ans LSB '\ x00'
我将MSB和LSB存储在两个变量中,并尝试通过int()将其从string转换为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)
感谢!!!
答案 0 :(得分:0)
这应该这样做:
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'
表示单个无符号字符,请参阅the struct docs。 <<
表示逐位移位,一旦你的MSB被移位,你可以简单地将它添加到LSB。