如何在Python中将整数转换为带符号字(用于PySerial)?

0 投票
2 回答
576 浏览
提问于 2025-04-16 01:42

我在用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 )

应该能给你一个 "有符号的字"。

撰写回答