我需要使用mysql中存储的数据来控制我的xbee。数据库中包含的是xbee的长地址,用于标识我在网络上与哪个xbee通信。在
下面的代码工作得很好,但是在这个例子中,我没有从数据库中检索地址。这只是一个例子说明什么是有效的。在
addr3 = '\x00\x13\xa2\x00@\n!\x1c'
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr3, #<- this works!
command='D0',
parameter='\x04')
现在只要我检索到\x00\x13\xa2\x00@\n!\x1c从数据库(它存储为varchar)中,我得到一个错误消息: “%(字段['name'],字段['len'])) ValueError:为'dest\u addr\u long'提供的数据不是8字节长”
下面是代码(为了帮助调试,我包含了下面六行打印行的输出)
^{pr2}$输出是
Address1: \x00\x13\xa2\x00@\n!\x1c
Address2: '\\x00\\x13\\xa2\\x00@\\n!\\x1c'
Address3: ?@
!
Size of Addr1: 45
Size of Addr2: 53
Size of Addr3: 29
显然,我只是简单地尝试了dest_addr_long=addr1,
但没有成功。在
我尝试过许多字符串操作的组合,例如添加和删除括号,以及几十种str和repr的组合,但我认为我完全走错了路。在
我想我需要问的是为什么
addr3 = '\x00\x13\xa2\x00@\n!\x1c'
print "Address3: %s" % addr3
输出
Address3: ?@ !
一旦我理解了这一点,那么我如何操作数据库中的addr1以匹配addr3,因为dest_addr_long=addr3,
行工作得很好。在
这是字节字符串的ASCII表示。^例如,{}表示00ienul,}是字面字符,但是{}表示换行符。这就是它的8字节长。在
\x13
是ESC;@
和{您可以通过使用“string escape”解码来获得实际字节:
(尽管在终端上打印的结果会有所不同)。在
相关问题 更多 >
编程相关推荐