如何将Integer转换为Python中的签名Word(与PySerial一起使用)?

时间:2010-07-22 18:05:25

标签: python serial-port pyserial

我在使用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,大多数时候显示器都会崩溃:(

有关如何正确完成此事的任何提示?

2 个答案:

答案 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