首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用ctype将Python列表转换为C数组?

如何使用ctype将Python列表转换为C数组?
EN

Stack Overflow用户
提问于 2010-11-10 22:58:14
回答 4查看 58K关注 0票数 54

如果我有以下两组代码,我如何将它们粘合在一起?

代码语言:javascript
复制
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,但这不起作用。

我还尝试使用类似这样的东西

代码语言:javascript
复制
x = c_void_p * 10 
for e in y:
    x[i] = e

但是这会得到一个语法错误。

C代码显然需要一个数组的地址。我怎么才能做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-10 23:08:33

以下代码适用于任意列表:

代码语言:javascript
复制
import ctypes
pyarr = [1, 2, 3, 4]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
票数 103
EN

Stack Overflow用户

发布于 2018-07-01 03:14:08

这是对公认答案的解释。

ctypes.c_int * len(pyarr)创建一个长度为4 (python3python 2)的c_int类型的数组(序列)。由于c_int是一个构造函数只接受一个参数的对象,因此(ctypes.c_int * len(pyarr)(*pyarr)pyarr中的每个c_int实例执行一次初始化。easier to read表单为:

代码语言:javascript
复制
pyarr = [1, 2, 3, 4]
seq = ctypes.c_int * len(pyarr)
arr = seq(*pyarr)

使用type函数查看seqarr之间的区别。

票数 20
EN

Stack Overflow用户

发布于 2010-11-10 23:07:58

来自the ctypes tutorial

代码语言:javascript
复制
>>> IntArray5 = c_int * 5
>>> ia = IntArray5(5, 1, 7, 33, 99)
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4145775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档