【问题标题】:SWIG return bytes instead of string with typemapSWIG 返回字节而不是带有类型映射的字符串
【发布时间】:2021-06-22 14:27:04
【问题描述】:

我的 C 库中有两个函数:

void passBytes(char *data, int size);
void returnBytes(char **data, int *size); //dynamically allocates

我使用这个post成功实现了第一个函数的包装器:

%typemap(in) (char *data, int size) {
  Py_ssize_t len;
  PyBytes_AsStringAndSize($input, &$1, &len);
  $2 = (int)len;
}

但不知道如何用typemaps 实现第二个包装器。不能使用SWIG_PYTHON_STRICT_BYTE_CHAR,因为我需要混合使用strbytes

【问题讨论】:

    标签: python swig swig-typemap


    【解决方案1】:

    你快到了

    %typemap(in, numinputs=0) (char **data) (char *temp) {
      $1 = &temp;
    }
    %typemap(argout) (char **data) {
      if (*$1) {
        $result = PyUnicode_FromString(*$1);
        free(*$1);
      }
    }
    

    请注意,这两个类型映射组合在一起完成了这项工作。如果字符数组以 null 结尾,则不需要该长度。参数temp 已创建,对此的引用将传递给分配数组的C 函数。

    【讨论】:

    • 哦,argout...我应该更彻底地阅读文档。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多