如何在Python中将整数转换为带符号字(用于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
你可能需要再看看关于“打包”和“解包”的文档。选择大写或小写字母可以让你指定字节序(Endianness)。所以,基于上面的例子在你的设备上没有完全正常工作,我猜你需要:
x = 100
y = 350
serial.Write('\x01' +
struct.pack('>hh', x) +
struct.pack('>hh', y)) # command , xpos , ypos
2
了解一下 struct
模块。
http://docs.python.org/library/struct.html
把所有的 "chr" 之类的东西换成合适的 struct.pack()
调用。
具体来说
bytes = struct.pack( 'h', some_data )
应该能给你一个 "有符号的字"。