Найти - Пользователи
Полная версия: Вывод знаковых чисел. проблема.
Начало » Python для новичков » Вывод знаковых чисел. проблема.
1
mks
Здравствуйте увожаемые.
Проблема вот в чем: в скрипте читаю данные из COM порта по 4 байта и формирую из них 32-х битные слова. Далее эти слова нужно сохранить в файл (или вывести на экран) как целые со знаком. Делаю примерно следующее:
byte1=0xFF
byte2=0xFF
byte3=0xFF
byte4=0xFF

k=(byte4<<24)|(byte3<<16)|(byte2<<8)|(byte1)

print('%d\n' % k)
Но вместо -1 получаю 4294967295. Как объяснить питону что k это знаковое число ? Возможно нужно действовать как то подругому ?
Андрей Светлов
Через struct преобразовывай
o7412369815963
можно так попробовать:
byte1=0xFF
byte2=0xFF
byte3=0xFF
byte4=0x7F
k=(byte4<<24)|(byte3<<16)|(byte2<<8)|(byte1)

if k>2147483647: k-=4294967296

print k
mks
o7412369815963 спасибо, пожалуй это лучшее решение. Эх я когдато так и делал а щас как память отшибло :)
Андрей Светлов
Ну-ну…
>>> f(0x01, 0xff, 0xff, 0xff)
33554431
>>> f(0xff, 0xff, 0xff, 0xff)
-1L
>>>
Оно вам такое надо: то возвращается int, а то - long. Который к тому же изрядно тормозит. И автоматом в int не преобразуется. 2 + 2L = 4L
>>> import struct
>>> BYTES = '<4B'
>>> INT = '<i'
>>>
>>> s = struct.pack(BYTES, 0xff, 0xff, 0xff, 0xff)
>>> s
'\xff\xff\xff\xff'
>>> i, = struct.unpack(INT, s)
>>> i
-1
mks
Просто с синтаксисом struct так и не смог разобратся и пошел по пути наименьшего сопротивления. А за пример спасибо =).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB