gpt4 book ai didi

python - 在 python 中操作字符串

转载 作者:行者123 更新时间:2023-11-29 00:04:41 25 4
gpt4 key购买 nike

我需要使用存储在 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),我就会收到一条错误消息:"% (字段['名称'], 字段['len']))ValueError:为“dest_addr_long”提供的数据不是 8 个字节长”

这是代码(我在下面包含了六个打印行的输出以帮助调试)

        with con: 
cur = con.cursor()
cur.execute("SELECT addrlong, pinStatus FROM deviceStatus WHERE addrlong <>''")
for i in range(cur.rowcount):
row = cur.fetchone()
addr1 = row[0]
Status = row[1]
addr2 = repr(addr1)
addr3 = '\x00\x13\xa2\x00@\n!\x1c'
print "Address1: %s" % addr1
print "Address2: %s" % addr2
print "Address3: %s" % addr3
print "Size of Addr1: %s" % sys.getsizeof(addr1)
print "Size of Addr2: %s" % sys.getsizeof(addr2)
print "Size of Addr3: %s" % sys.getsizeof(addr3)
if Status == 0: #turn off
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr2, #<-problem is here
command='D0',
parameter='\x04')
if Status == 1: #turn on
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr2, #<-problem is here
command='D0',
parameter='\x05')

输出是

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'
打印“地址 3: %s” % addr3

输出

Address3: ?@ !

一旦我理解了这一点,那么我该如何操作数据库中的 addr1 以匹配 addr3,因为行 dest_addr_long=addr3, 工作得很好。

最佳答案

那是一个字节串的ASCII表示。例如\x00表示00即NUL,\x13表示ESC; @! 是文字字符,但是 \n 表示换行符。这就是它的 8 个字节长。

您可以通过使用“string-escape”解码来取回实际字节:

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

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

关于python - 在 python 中操作字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28095377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com