2016-09-22 86 views
0

我遇到了一个问题,生成一个与底层C代码的Python接口。 我有下面的代码片段:SWIG从C返回无符号字符*到Python

prov.h

​​

prov.c

#include "prov.h" 

unsigned char *out() 
{ 
    unsigned char *bytes="Hello"; 
    unsigned char *data=NULL; 
    data=calloc(6,sizeof(char)); 
    if(data) { 
     strncpy(data,bytes,6); 
    } 
    return data; 
} 

prov.i

%module prov 
%{ 
#include "prov.h" 
%} 

unsigned char *out(); 

我产生了。所以作为如下所示:

$ swig -python prov.i 
$ gcc -fpic -c prov.c prov_wrap.c -I/usr/include/python2.7 
$ gcc -shared prov.o prov_wrap.o -o _prov.so 
$ python 
Python 2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
>>> import prov 
>>> s=prov.out() 
>>> s 
<Swig Object of type 'unsigned char *' at 0x7fb241dbff90> 

现在的问题是,当我尝试从我的C函数查看返回的字符串时,它似乎没有将其显示为python字符串对象(我期望在打印时输出应该是'Hello “)。任何人都可以请帮助我与返回无符号字符*到Python的调用代码?

回答

0

或者返回char*,或者您可以将char*类型映射应用于unsigned char*。您还需要%newobject让Python知道在将返回结果转换为Python对象后释放返回的指针。

%module prov 
%{ 
#include "prov.h" 
%} 

%apply char* {unsigned char*};  
%newobject out; 
unsigned char *out();