Python组合通过seri接收的十六进制值

2024-04-25 22:37:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个应用程序,其中我正在接收不同长度的串行字节数据包,这些数据包通过将标志帧到缓冲区中来标记,然后利用收集到的字节访问字典来识别值。当前,我的串行读取函数监视串行线,直到出现结束标志字节或出现超时

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的字典值?或者,有没有更好的方法在我的串行读取函数期间接收十六进制字节,以便它们以一种更有利于以后组合它们的方式存储


Tags: 函数字符串selfread字典字节标志数据包

热门问题