Форум сайта python.su
Здравствуйте увожаемые.
Проблема вот в чем: в скрипте читаю данные из COM порта по 4 байта и формирую из них 32-х битные слова. Далее эти слова нужно сохранить в файл (или вывести на экран) как целые со знаком. Делаю примерно следующее:
byte1=0xFF
byte2=0xFF
byte3=0xFF
byte4=0xFF
k=(byte4<<24)|(byte3<<16)|(byte2<<8)|(byte1)
print('%d\n' % k)
Офлайн
Через struct преобразовывай
Офлайн
можно так попробовать:
byte1=0xFF
byte2=0xFF
byte3=0xFF
byte4=0x7F
k=(byte4<<24)|(byte3<<16)|(byte2<<8)|(byte1)
if k>2147483647: k-=4294967296
print k
Отредактировано (Авг. 12, 2009 12:43:36)
Офлайн
o7412369815963 спасибо, пожалуй это лучшее решение. Эх я когдато так и делал а щас как память отшибло :)
Офлайн
Ну-ну…
>>> f(0x01, 0xff, 0xff, 0xff)
33554431
>>> f(0xff, 0xff, 0xff, 0xff)
-1L
>>>
>>> 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
Офлайн
Просто с синтаксисом struct так и не смог разобратся и пошел по пути наименьшего сопротивления. А за пример спасибо =).
Офлайн