将元素列表转换为整数并右移

Convert element list to integer and shift to right

我正在编写 python 代码,每次从串行读取一个字节并将其存储到列表中。

接下来我需要合并两个字节来获得负载长度。为了实现这个目标,我需要将长度的 MSB(最高有效字节)和 LSB(最低有效字节)转换为整数,然后移动 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: ''**

length的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' 表示单个无符号字符,参见the struct docs<< 表示位移,一旦你的 MSB 被移动,你可以简单地将它添加到 LSB。