首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swig:如何在Python中访问C数组

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

Stack Overflow用户
提问于 2017-04-06 09:25:12
回答 1查看 759关注 0票数 1

我在C代码中有以下变量,我将一些变量存储在二维数组中。我正在尝试用python访问这个数组。我正在跟踪info..How我可以从该数组中检索数据吗

module.c

代码语言:javascript
复制
uin32_t  array_vaiable[10][100]

module.h

代码语言:javascript
复制
extern uint32_t array_variable[10][100]

module.i

代码语言:javascript
复制
%module mod
%{
    #include "module.h"
%}
%include "typemaps.i"
%include "module.h"
代码语言:javascript
复制
swig -python module.i

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

回答 1

Stack Overflow用户

发布于 2017-04-11 05:53:03

一般来说,公开全局变量不是一个好主意,你应该使用一个函数来公开静态信息。

一个非常粗糙的解决方案:

module.h

代码语言:javascript
复制
extern uint32_t array_variable[10][100]
uint32_t* cast(uint32_t (*a)[100]);

module.cpp

代码语言:javascript
复制
uint32_t array_variable[10][100] = {{}};
uint32_t* cast(uint32_t (*a)[100]) {
  return &(a[9][99]);
}

module.i

代码语言:javascript
复制
%module example
%{
     #include "test.h"
%}

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

%include "test.h"

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

代码语言:javascript
复制
import example
example.uint32p_assign(example.cast(example.cvar.array_variable),2)
example.uint32p_value(example.cast(example.cvar.array_variable))

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43244166

复制
相关文章

相似问题

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