簡體   English   中英

SWIG將未簽名的char *從C返回到Python

[英]SWIG return unsigned char * from C to Python

我在使用基礎C代碼為python生成接口時遇到問題。 我有以下幾段代碼:

#include<string.h>
#include<stdio.h>
#include<stdlib.h>

unsigned char *out();

#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;
}

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

unsigned char *out();

然后生成.so,如下所示:

$ 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函數查看返回的字符串s時,似乎沒有將其顯示為python字符串對象(我期望在打印s時輸出應為“ Hello”)。 誰能幫我將unsigned char *返回給python調用代碼嗎?

要么返回char* ,要么可以將char*映射應用於unsigned char* 您還希望%newobject在將返回結果轉換為Python對象之后讓Python知道釋放返回的指針。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM