尝试从Lowe的Iris SmartSwitch解码Zigbee协议。我正在使用的API回调接收已经解析的帧,并作为(我相信)字典对象(?)发送到回调。我的代码:
def callback(data):
print data
打印以下内容:
{'profile': '\xc2\x16', 'source_addr': '\x93\x0c', 'dest_endpoint':
'\x02', 'rf_data': '\t\x00\x81\x00\x00', 'source_endpoint': '\x02',
'options': '\x01', 'source_addr_long': '\x00\ro\x00\x03\xbc\xdf\xab',
'cluster': '\x00\xef', 'id': 'rx_explicit'}
我认为这是按字节顺序排列的,我更喜欢输出:
C2 16 93 0C 02 09 00 81 00 00 02 01 00 ...
任何使用Python内置函数的方法,使用给定的数据'争论?另外,我不知道如何解释" \ ro"作为8位十六进制。 " \ t",我认为是0x09。
我真正想要的是数据帧的原始转储,但我不知道是否有API调用。
答案 0 :(得分:2)
任何使用Python内置函数的方法,使用给定的数据'参数
没有。字典是任意排序的,因此无法知道值应该是什么顺序。
另外,我不知道如何解释" \ ro"为8位十六进制。
它" \ r"和" o",这是0x0d 0x6f。
" \ t",我认为是0x09。
ParseExact
我真正想要的是数据帧的原始转储,但我不知道是否有API调用。
我们不知道,因为您还没有分享您首先使用的API。
答案 1 :(得分:0)
如果您没有空格,请尝试使用字符串内置的encode
方法。
所以'\x0a\x0b\x0c'.encode('hex')
会产生'0a0b0c'
。有许多是你可以迭代字典值,但要注意它是一个固有的无序数据结构。
也许这样的事情可以吗?
data = {'a':'\x0a\x0a\x0a', 'b':'\x0b\x0b\x0b'}
print '{' + ''.join( [ ('\'%s\'' %k) + ': \'%s\',' %data[k].encode('hex') for k in data ] ) + '}'
答案 2 :(得分:0)
这有效:
def printData(data)
str = "> "
for d in data:
for e in data[d]:
str = str + "{0:02X}".format(ord(e)) + " "
print (str)
我使用此字符串构建器,因此我可以使用logging.info(str)而不是print ...