我在Python2.7中第一次使用ctypes有点麻烦。问题如下:
问题是另一个函数看不到我在Python中所做的任何更改。我在Python解释器上使用gdb确认了这一点。基本上,我执行的所有操作都没有任何效果,我希望设置的字段为零或不包含任何数据。在
以下是与库交互的Python代码:
pxCspPacket = ctypes.cast(
pycsp.csp_buffer_get(bytesToSend),
ctypes.POINTER(pycsp.csp_packet_t))
pxCspPacket.contents.length = bytesToSend
ctypes.memmove(pxCspPacket.contents.data,
dataToSend,
bytesToSend)
# Send packet
pycsp.csp_send(conn, pxCspPacket, self.cspTimeout)
对库的绑定如下:
^{pr2}$C中结构的对应定义:
typedef struct __attribute__((__packed__)) {
uint8_t padding[CSP_PADDING_BYTES];
uint16_t length;
csp_id_t id;
union {
uint8_t data[0];
uint16_t data16[0];
uint32_t data32[0];
};
} csp_packet_t;
提前感谢您的帮助!在
我发现了这个问题,这与我使用ctypes的方式无关。结果发现,C语言中结构的定义与我的python绑定不同——在本机库中,CSP_PADDING_BYTES被定义为8字节,而python绑定中的填充被设置为46字节。在
绑定和结构定义不是我自己的代码,但至少我知道如何修复它!在
相关问题 更多 >
编程相关推荐