我正在尝试包装pre-existing c code,以便在Linux的Python中使用。我对c没有什么经验,目前我正在使用ctypes来解决这个问题。我的C函数需要一个带有自定义类型项的2d数组,但我不知道如何在python中重新创建它以将其传递给C函数。在
下面是我要调用的函数:
void usbBuildGainTableAI_USB1808(libusb_device_handle *udev, Calibration_AIN table[NCHAN_1808][NGAINS_1808])
{
int i, j;
uint16_t address = 0x7000; // base address of ADC calibration coefficients.
for (i = 0; i < NCHAN_1808; i++) {
for (j = 0; j < NGAINS_1808; j++) {
usbMemAddressW_USB1808(udev, address);
usbMemoryR_USB1808(udev, (uint8_t *) &table[i][j].slope, sizeof(float));
address += 4;
usbMemAddressW_USB1808(udev, address);
usbMemoryR_USB1808(udev, (uint8_t *) &table[i][j].offset, sizeof(float));
address += 4;
}
}
return;
}
头文件已定义
^{pr2}$其中,NCHAN_18081和NGAINS_1808是常数,udev是整数。我遵循了一个关于多维数组的older question,并试图创建一个类似于c代码中的结构。在
^{3}$但这有两个问题:自定义类型校准不能像int或float那样用操作符*填充在数组中,而且我不能将自定义类型传递给c。我也尝试过用Python语言创建一个列表数组,但是我不能将它转换成任何可以通过ctypes传递的有用的内容。在
如何在不修改c代码的情况下从python调用这个函数?任何帮助将不胜感激,也请让我知道我是否应该只是学习c和尝试用c或Cython编写我的程序。Ctypes可能不是最好的方法。在
行:
应引发类型错误,因为您实例化了校准。我相信你的意思是:
^{pr2}$但即便如此,您也不需要AINarray包装器。根据[Python]: Arrays,您可以做如下操作:
然后,为了初始化一个实例,请执行以下操作:
相关问题 更多 >
编程相关推荐