Как я могу преобразовать Integer в подписанное слово в Python (для использования с PySerial)? - PullRequest
0 голосов
/ 22 июля 2010

У меня возникли некоторые проблемы, когда Python разговаривает с аппаратным дисплеем с помощью pyserial. Некоторые функции дисплея требуют, чтобы подписанное слово отправлялось в качестве аргументов после команд (т. Е. X или Y на экране дисплея).

Раньше я обходился с chr (), но это работает только с числами <255. </p>

Я попробовал следующее для преобразования, но оно дает странные результаты, помещая вещи далеко от заданной позиции:

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 ]

2 голосов
/ 22 июля 2010

Читать о модуле struct.

http://docs.python.org/library/struct.html

Замените все "chr" и прочее соответствующими struct.pack() вызовами.

В частности

bytes = struct.pack( 'h', some_data )

Должен дать вам "подписанное слово".

0 голосов
/ 02 февраля 2013

Возможно, вы захотите еще раз пересмотреть документацию о «упаковать» и «распаковать».Выбор соответствующего верхнего или нижнего регистра позволяет вам указывать порядковый номер.Итак, основываясь на приведенном выше примере, который не работал идеально на вашем устройстве, я предполагаю, что вам нужно:

x = 100
y = 350
serial.Write('\x01' + 
             struct.pack('>hh', x) + 
             struct.pack('>hh', y)) # command , xpos , ypos
...