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

时间:2016-03-29 09:21:27

标签: python serial-port bit-shift pyserial

我处理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)

感谢!!!

1 个答案:

答案 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。