将元素列表转换为整数并右移
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。
我正在编写 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。