我正在开发一个应用程序,其中我正在接收不同长度的串行字节数据包,这些数据包由帧标记标记到缓冲区中,然后利用收集的字节来访问字典以识别值。目前,我的串行读取功能会监视串行线,直到出现END_FLAG字节或发生超时...
def receive_command(self):
self.rxBuff = list(self.ser.read(1))
#Keep receiving bytes until END_FLAG or timeout
while self.rxBuff[-1] != chr(flagDict["END_FLAG"]):
tBuff = self.ser.read(1)
if len(tBuff) != 1:
print "Timeout"
else:
self.rxBuff.append(tBuff)
这最终将十六进制字节读入缓冲区,其中它们用转义字符“\ x ##”或它们的ASCII值表示。在代码中我有一个字典,它允许我根据四字节十六进制值识别微控制器模型:
STM32_TYPE = {
0x410: "STM32F103RB",
0x415: "STM32L152RG",
0x417: "STM32L053R8",
0x421: "STM32F446RE",
0x431: "STM32F411RE",
0x433: "STM32F401RE",
0x437: "STM32L152RE",
0x439: "STM32F302R8",
0x438: "STM32F334R8",
0x440: "STM32F030R8",
0x442: "STM32F091RC",
0x446: "STM32F303RE",
0x447: "STM32L073RZ",
0x448: "STM32F070RB/STM32F072RB",
0x458: "STM32F410RB",
}
我遇到的问题是,为了访问此字典中的值,我需要组合两个单独的字节(来自后续数据包的字节3和4)。
['\x12','\x03','F','\x04','\x13']
我的目标是将字节3和4重组为值0x0446以用于访问前面提到的字典。然而,我不知道如何实现这一点,因为所有这样做的尝试都产生了简单的组合字符串(这是有意义的,因为这些是字符串表示),或整数值,当我尝试时不等于访问字典。我的问题是,有没有办法组合这些十六进制值('F'和'\ x04'),以便使用它们来访问密钥0x0446的字典值?或者,有没有更好的方法在我的串行读取功能期间接收十六进制字节,以便它们以更有利于以后组合它们的方式存储?