python ctypes按位数据打包

时间:2013-07-03 09:44:41

标签: python python-2.7 bit-manipulation ctype

item = -35519      
data_in = ctypes.c_int16(item)
data_pkd = (ctypes.c_int32(0) | data_in)

我收到以下错误

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----------------------------|

我打算将32位测试数据发送到接受int32作为输入的C应用程序,如上面的数据格式所述。

由于

1 个答案:

答案 0 :(得分:0)

您不需要按位 - 或者只需将16位值打包成32位值,即促销:

data_pkd = ctypes.c_int32(data_in.value)

要实际执行按位或按ctypes值,请对其value属性进行操作:

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