2016-09-22 24 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();