Skip to main content
 首页 » 编程设计

python之按长度(以字节为单位)在 Python 中拆分值中的数组

2025年05月04日9kenshinobiy

我有一个传感器系统。传感器接收我的命令,执行某些操作,然后向我发送响应。

响应是这样的:

seq. number |   net_id  |   opcode_group |  opcode | payloadlength    |   val 

我用空格字符分隔这些值。

现在我想获取名为 val 的最后一个值。在这一部分中,我拥有我想知道的所有信息,以详细说明传感器的响应。

例如,我对想要知道传感器的 IEEE MAC 地址的命令有这样的响应:

response

在这种情况下,val 是响应中 Length 之后的所有字段。没有分离,但我有一种弦。

我所要做的就是拆分这个数组/数字字符串,只知道每个字段的长度。对于前。状态为1字节,MAC地址为8字节,依此类推...

我的代码是这样的:

if response.error: 
        ret['error'] = 'Error while retrieving unregistered sensors' 
    else: 
        for line in response.body.split("\n"): 
            if line != "":  
                value = int(line.split(" ")[6]) 
 
    ret['response'] = value 
    self.write(tornado.escape.json_encode(ret)) 
    self.finish()                
 
    if command == 'IDENTIFY': 
        status = value.split(" ")[0] 
        IEEEAddrRemoteDev = value.split(" ")[1] 
        NWKAddrRemoteDev = value.split(" ")[2] 
        NumOfAssociatedDevice = value.split(" ")[3] 
        StartIndex = value.split(" ")[4] 
        ListOfShortAddress = value.split(" ")[5] 
        if status == 0x00: 
            ret['success'] = "The %s command has been succesfully sent! \ 
            IEEE address: %s" % % (command.upper(), IEEEAddrRemoteDev) 
            self.write(tornado.escape.json_encode(ret)) 
        elif status == 0x80: 
            ret['success'] = "Invalid Request Type" 
            self.write(tornado.escape.json_encode(ret)) 
        elif status == 0x81: 
            ret['success'] = "Device Not Found" 
            self.write(tornado.escape.json_encode(ret)) 

在第一部分中,我从整个响应中获取第 6 个值,并将其放入变量 value 中。在此之后,我想在每个组件中拆分这个变量。

例如。这个 status = value.split("")[0] 我必须以哪种方式拆分????

非常感谢您的帮助!

请您参考如下方法:

val 字段的确切格式是什么(即代码中 value 的内容)?它是一个字符串吗?一个字节序列?

如果它是一个字符串,你可以使用:

   status = value[0] 
   IEEEAddrRemoteDev = value[1:8] 
   NWKAddrRemoteDev = value[9:2] 
   NumOfAssociatedDevice = value[11:1] 
   StartIndex = value[12:1] 
   ListOfShortAddress = value[13:2*NumOfAssociatedDevice] 

如果它是一个字节序列,那么您可以使用 struct.unpack() - 参见 here .