在python中操作字符串

2024-06-16 11:17:14 发布

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

我需要使用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,行工作得很好。在


Tags: of数据数据库size地址longdestaddr
1条回答
网友
1楼 · 发布于 2024-06-16 11:17:14

这是字节字符串的ASCII表示。^例如,{}表示00ienul,\x13是ESC;@和{}是字面字符,但是{}表示换行符。这就是它的8字节长。在

您可以通过使用“string escape”解码来获得实际字节:

>>> s='\x00\x13\xa2\x00@\n!\x1c'
>>> print s.decode('string-escape')
�@
!

(尽管在终端上打印的结果会有所不同)。在

相关问题 更多 >