我在使用pyserial使Python与硬件显示器对话时遇到了一些问题。 某些显示功能需要在命令后(即显示屏上的X或Y)将带符号的字作为参数发送。
我以前用chr()来过,但这只适用于数字< 255。
我已经尝试了以下转换,但是它给出了一些奇怪的结果,让事情远离设定的位置:
def ByteIt(self,data):
datastring = str()
for each in tuple(str(data)):
datastring = datastring + chr(int(each))
return datastring
我可能会离开这里:)
我将如何使用它的示例:
x = 100
y = 350
serial.Write('\x01' + ByteIt(x) + ByteIt(y)) # command , xpos , ypos
问题是,当我这样做时,东西不会放在x100,y350,大多数时候显示器都会崩溃:(
有关如何正确完成此事的任何提示?
答案 0 :(得分:2)
了解struct
模块。
http://docs.python.org/library/struct.html
使用正确的struct.pack()
来代替所有“chr”和内容。
特别是
bytes = struct.pack( 'h', some_data )
应该给你一个“签名的单词”。
答案 1 :(得分:0)
您可能需要再次修改有关“pack”和“unpack”的文档。选择适当的大写或小写可以指定Endianness。因此,根据上面的示例,在您的设备上无法正常工作,我认为您需要:
x = 100
y = 350
serial.Write('\x01' +
struct.pack('>hh', x) +
struct.pack('>hh', y)) # command , xpos , ypos