swig:如何在Python中访问C数组

时间:2017-04-06 01:25:12

标签: python c swig

我在C代码中有以下变量,我将一些变量存储在2D数组中。我试图在python中访问此数组。我得到以下信息..如何从该数组中检索数据

的module.c

extern uint32_t array_variable[10][100]

module.h中

%module mod
%{
    #include "module.h"
%}
%include "typemaps.i"
%include "module.h"

module.i

swig -python module.i

<Swig Object of type 'int (*)[100]'>
{{1}}

1 个答案:

答案 0 :(得分:0)

暴露全局变量通常是一个坏主意,你应该使用一个函数来暴露静态信息。

非常粗糙的解决方案:

module.h中

extern uint32_t array_variable[10][100]
uint32_t* cast(uint32_t (*a)[100]);

module.cpp

uint32_t array_variable[10][100] = {{}};
uint32_t* cast(uint32_t (*a)[100]) {
  return &(a[9][99]);
}

module.i

%module example
%{
     #include "test.h"
%}

%include "stdint.i"
%include "cpointer.i"
%pointer_functions(uint32_t, uint32p);

%include "test.h"

并在Python中执行以下操作以访问例如第一个元素

import example
example.uint32p_assign(example.cast(example.cvar.array_variable),2)
example.uint32p_value(example.cast(example.cvar.array_variable))

如果您想访问其他元素,可以使用carrays.i,然后将2D数组转换为1D阵列。