2013-07-03 2 views
-1
item = -35519  
data_in = ctypes.c_int16(item) 
data_pkd = (ctypes.c_int32(0) | data_in) 

Я получаю ниже ошибокPython ctypes битовых данные упаковок

data_pkd = (ctypes.c_int32(0) | data_in) 
TypeError: unsupported operand type(s) for |: 'c_long' and 'c_short' 
|31||30| 29 28 27 26 25 24 23 22 21 20 19 18 17 16| 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0| 
|P|M|------------------unused-------------------------------------|------------------------------item----------------------------| 

I Намерение для отправки тестовых данных 32-битовых к приложению C, принимающее int32 в качестве входных данных, указанного в приведенном выше формата данных.

Благодаря

ответ

0

Вам не нужно побитовое или просто упаковка 16-разрядное значение в 32-битном, то есть продвижение по службе:

data_pkd = ctypes.c_int32(data_in.value) 

Чтобы реально выполнить побитовое или на ctypes, действуют на свой атрибут значения:

x = ctypes.c_int16(...) 
y = ctypes.c_int32(...) 
data_pkd = ctypes.c_int32(x.value | y.value)