gpt4 book ai didi

python - swig C++ to python 通过引用返回 unsigned char*

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:44 26 4
gpt4 key购买 nike

我正在使用 swig 将 c++ 函数包装到 python 中,如下所示:

int getBytes(unsigned char *& result, int length)

我从this question中学到了如何通过引用包装返回 char* 的函数:

%typemap(in,numinputs=0) char*& (char* tmp) %{
$1 = &tmp;
%}

%typemap(argout) char*& (PyObject* obj) %{
obj = PyUnicode_FromString(*$1);
$result = SWIG_Python_AppendOutput($result,obj);
%}

%typemap(freearg) char*& %{
free(*$1);
%}

我尝试将其应用于 unsigned char* 但失败了,并收到错误消息,即 SWIG_Python_AppendOutput 无法将 unsigned char** 转换为 signed char**。我搜索了 python 文档,但没有找到可以将 unsigned char** 转换为 unsigned char** 的函数。任何人都可以帮忙吗?谢谢!

最佳答案

很久以前我就解决了这个问题,以下是我的解决方案:

%typemap(in, numinputs= 0) (unsigned char *&result, int &length) (unsigned char *temp, int len) %{
$1 = &temp;
$2 = &len;
%}

%typemap(argout) (unsigned char *&result, int &length) %{
PyObject* arg5 = 0;
arg5 = SWIG_FromCharPtrAndSize((const char *)(*$1), *$2);

PyObject* temp = NULL;
temp = $result;
$result = PyList_New(1);
PyList_SetItem($result, 0, temp);
PyList_Append($result, (PyObject*)arg5);//unsigned char *&
PyList_Append($result, PyInt_FromLong(*$2));

Py_DECREF(temp);
%}

关于python - swig C++ to python 通过引用返回 unsigned char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com