如果我有以下两组代码,我如何将它们粘合在一起?
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)
Run Code Online (Sandbox Code Playgroud)
如何在x中使用连续的元素列表调用c_function?我试图将x转换为c_void_p,但这不起作用.
我也试过用类似的东西
x = c_void_p * 10
for e in y:
x[i] = e
Run Code Online (Sandbox Code Playgroud)
但是这会出现语法错误.
C代码显然需要数组的地址.我如何实现这一目标?
Gab*_*aru 76
以下代码适用于任意列表:
import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
Run Code Online (Sandbox Code Playgroud)
从ctypes教程:
>>> IntArray5 = c_int * 5
>>> ia = IntArray5(5, 1, 7, 33, 99)
Run Code Online (Sandbox Code Playgroud)
这是对已接受答案的解释.
ctypes.c_int * len(pyarr)创建一个c_int长度为4 的数组(序列)(python3,python 2).由于c_int是一个对象,其构造函数采用一个参数,因此(ctypes.c_int * len(pyarr)(*pyarr)每个c_int实例的一次性初始化pyarr.一个易于阅读的形式是:
pyarr = [1, 2, 3, 4]
seq = ctypes.c_int * len(pyarr)
arr = seq(*pyarr)
Run Code Online (Sandbox Code Playgroud)
使用type功能看之间的区别seq和arr.
| 归档时间: |
|
| 查看次数: |
40485 次 |
| 最近记录: |