我正在开发一个应用程序,其中我正在接收不同长度的串行字节数据包,这些数据包通过将标志帧到缓冲区中来标记,然后利用收集到的字节访问字典来识别值。当前,我的串行读取函数监视串行线,直到出现结束标志字节或出现超时
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值表示。在代码中,我有一个字典,它允许我根据四字节十六进制值识别microcontoller模型:
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&;1);从以下数据包中选择4)
['\x12','\x03','F','\x04','\x13']
我的目标是将字节3和4重新组合到值0x0446中,以用于访问前面提到的字典。然而,我不知道如何做到这一点,因为所有这样做的尝试都产生了简单的组合字符串(考虑到它们是字符串表示形式,这是有意义的),或者在我尝试访问字典时不被认为是等价的整数值。我的问题是,有没有一种方法可以组合这些十六进制值(“F”和“\x04”),以便使用它们访问键0x0446的字典值?或者,有没有更好的方法在我的串行读取函数期间接收十六进制字节,以便它们以一种更有利于以后组合它们的方式存储
^{}
相关问题 更多 >
编程相关推荐