python ctypes返回0作为数组中的第一个元素?

2024-04-24 23:01:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的python脚本,它使用ctypes将数组指针传递给外部函数。然后,外部函数只需将同一个数组传递回python(这是一个简单的单元测试,以确保python和外部函数都使用相同的值)。函数原型如下所示:

void Array_tmp(int32_t Array[], int32_t *len, int32_t Array2[])

python脚本如下所示:

^{pr2}$

脚本的输出如下所示:

<numpy.ctypeslib.c_long_Array_5 object at 0x044A7AD0>
[0 2 3 4 5]

为什么数组的第一个元素显示为零而不是一,而其他元素都是正确的?在

编辑:将c_arr_ptr = cast(c_arr, POINTER(c_double))更改为c_arr_ptr = cast(c_arr, POINTER(c_int32))对输出没有任何影响,除了可能稍微改变内存地址。在


Tags: 函数脚本元素数组单元测试ctypesarray原型
1条回答
网友
1楼 · 发布于 2024-04-24 23:01:58

这里的代码有很多问题。下面是一个有效的例子:

测试c

#include <memory.h>
#include <inttypes.h>

#define API __declspec(dllexport) /* Windows-specific export */

/* FYI: No reason for 'len' to be a pointer */
API void Array_tmp(int32_t Array[], int32_t *len, int32_t Array2[])
{
    memcpy(Array2,Array,*len * sizeof(int32_t));
}

测试.py

^{pr2}$

输出:

[1 2 3 4 5]

相关问题 更多 >