我有一个传感器系统。传感器接收来自我的命令,做一些事情,然后向我发送回复。
响应是这样的:
seq. number | net_id | opcode_group | opcode | payloadlength | val
我将这些值用空格字符分隔。
现在我想取名为val
的最后一个值。在这一部分中,我将获得所有我想知道的信息,以详细说明传感器的响应。
例如,我对想要知道传感器的IEEE MAC地址的命令有这个响应:
在这种情况下,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]
我必须以哪种方式拆分????
非常感谢您的帮助!
答案 0 :(得分: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。
答案 1 :(得分:0)
问题是你将它视为一个Python字符串,但它只是一堆。
您需要使用struct.unpack
将其拆分。