2017-04-06 20 views
0

我在C代碼中有以下變量,其中我在2D數組中存儲了一些變量。我想在python中訪問這個數組。我得到以下info..How我可以從陣列swig:如何在Python中訪問C數組

的module.c

uin32_t array_vaiable[10][100] 

module.h中

extern uint32_t array_variable[10][100] 

module.i

%module mod 
%{ 
    #include "module.h" 
%} 
%include "typemaps.i" 
%include "module.h" 
檢索數據
swig -python module.i 

<Swig Object of type 'int (*)[100]'> 
+0

在接口中暴露全局變量是不好的做法。您將始終傾向於公開一個在接口上返回變量的函數。你可以做什麼轉換爲簡單的指針並使用'cpointer.i' –

回答

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你cast'ed的二維數組一維數組。