如何使用ctypes将Python列表转换为C数组?
问题描述:
如果我有以下两组代码,我该如何将它们粘合在一起?如何使用ctypes将Python列表转换为C数组?
void
c_function(void *ptr) {
int i;
for (i = 0; i < 10; i++) {
printf("%p", ptr[i]);
}
return;
}
def python_routine(y):
x = []
for e in y:
x.append(e)
我怎样才能调用与x中的元素连续列表的c_function?我试图将x转换为c_void_p,但那不起作用。
我也尝试过使用类似
x = c_void_p * 10
for e in y:
x[i] = e
但得到一个语法错误。
C代码显然需要数组的地址。我如何得到这个发生?
答
下面的代码适用于任意列表:
import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
答
>>> IntArray5 = c_int * 5
>>> ia = IntArray5(5, 1, 7, 33, 99)
+0
尝试超过255项创建阵列。 – 2015-06-19 13:14:50
+2
适用于超过255项:'IntArray300 = c_int * 300; arrayWith300Elements = IntArray300(* list([i for i in range(300)]))' – 2016-12-20 10:33:19
“* pyarr”in python ...这是什么意思? – AaronYC 2012-12-21 08:34:56
@AaronYC我很抱歉的混淆; 'pyarr'是一个普通的python列表,比如'pyar = [1,2,3,4]'。如果你想知道名称之前的明星,请检查:http://*.com/questions/400739/what-does-mean-in-python – 2012-12-22 05:07:03
非常感谢...你给的链接是我需要什么...... – AaronYC 2012-12-24 03:17:49