python: анализ строк из serial.read () - PullRequest
1 голос
/ 09 июня 2011

Я общаюсь между скриптом Python на ПК и встроенным c.У меня есть следующая проблема:

Из mcu (встроенный с), я посылаю двоичное представление целых чисел и чисел с плавающей точкой.Используя терминал Br @ y, я убедился, что двоичное представление чисел отправляется из mcu.В скрипте python я использую serial.read pySerial для получения байтов, помещая их в список.

Если я отправлю следующее число из mcu: 0x10000000 (16 оснований 10, в младшем порядке), оно показываетв скрипте python '\ x10 \ x00 \ x00 \ x00', что не так уж и страшно, поскольку я могу просто вытаскивать символы из последовательных индексов.Однако, когда две шестнадцатеричные цифры представляют символ ascii, строка будет иметь символ ascii вместо \ xDD.

Есть ли способ заставить строку использовать только представление \ xDD, а не значения ascii?Или мне придется просто перебрать строку, удалив '\ x' и преобразовав значения ascii по ходу дела?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Python всегда печатает строку одинаково.

Попробуйте функцию "hexlify" из модуля binascii:

>>> binascii.hexlify('\x10\x00\x00\x00')
'10000000'
2 голосов
/ 09 июня 2011

Вы уверены, что \x находится в строке?Это похоже на строку представления Python (repr) для двоичных данных, но символы \x на самом деле не находятся в строке.

Модуль struct может распаковать двоичные данные.

s = '\x10\x00\x00\x00'
i = struct.unpack("I", s)[0]

i теперь равно 16 (int).

...