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

发布于 2021-01-29 19:34:49

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

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代码显然想要一个数组的地址。我如何做到这一点?

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    import ctypes
    pyarr = [1, 2, 3, 4]
    arr = (ctypes.c_int * len(pyarr))(*pyarr)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看