【问题标题】:SWIG return unsigned char * from C to PythonSWIG 将 unsigned char * 从 C 返回到 Python
【发布时间】:2016-09-22 02:03:07
【问题描述】:

我在使用底层 C 代码为 python 生成接口时遇到了问题。 我有以下代码:

prov.h

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

unsigned char *out();

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

全省

%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 调用代码?

【问题讨论】:

    标签: python c swig


    【解决方案1】:

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

    %module prov
    %{
    #include "prov.h"
    %}
    
    %apply char* {unsigned char*};    
    %newobject out;
    unsigned char *out();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多