我对python还是很陌生,我目前正在玩pyserial 我基本上所做的就是通过UART发送简单的命令。我有一个简单的命令:
b'page 0\xff\xff\xff'
基本上对硬件说“进入索引为0的页面”(它是Nextion display)。我想做的是以某种方式参数化此字节数组,以便能够动态传递 0 。我在互联网上读过不同的主题,首先将其制成字符串,然后使用 bytearray ,但我想知道是否不可能通过字符串插值或某种方式将其应用于此处。
注意:结尾的 \ xff 是特定于硬件的,必须存在。
答案 0 :(得分:1)
您是否签出了python中的字符串格式文档?
pageNum = 0
b'page {}\xff\xff\xff'.format(pageNum)
https://docs.python.org/3.4/library/string.html#string-formatting
答案 1 :(得分:0)
如果有人仍然对我如何实现目标感兴趣,我会采用以下解决方案:
def __formatted_page_command(self, pageId):
# This is the representation of 'page 0\xff\xff\xff'. What we do here is to dynamically assign the page id.
commandAsBytesArray = [0x70,0x61,0x67,0x65,0x20,0x30,0xff, 0xff, 0xff]
commandAsBytesArray[5] = ord(str(pageId))
return bytes(commandAsBytesArray)
因此,通过这种方式,我可以动态获得:
b'page 0\xff\xff\xff'
b'page 1\xff\xff\xff'
b'page 2\xff\xff\xff'
只需致电
self.__formatted_page_command(myPageId)
答案 2 :(得分:0)
我在寻找其他东西,但在结果中发现了这个。我忍不住要添加一个对我来说似乎很标准的解决方案。
在Python 2中,有一个较低级别的格式化结构,其速度比.format
更快,后者以内置str的 mod 运算符%
的形式内置在语言中。有人告诉我,它要么与C的stdlib printf样式共享代码,要么就模仿了C的stdlib printf样式。
# you're pretty screwed if you have > 255 pages
# or if you're trying to go to the last page dynamically with -1
assert 0 <= pageId <= 0xff, "page out of range"
return b'page %s\xff\xff\xff' % pageId
有other options,但我更喜欢老式的简洁。