SWIG return 字节而不是带有类型映射的字符串
SWIG return bytes instead of string with typemap
我的 C 库中有两个函数:
void passBytes(char *data, int size);
void returnBytes(char **data, int *size); //dynamically allocates
我使用这个 :
成功实现了第一个函数的包装器
%typemap(in) (char *data, int size) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &, &len);
= (int)len;
}
但无法弄清楚如何使用 实现第二个包装器。不能使用 SWIG_PYTHON_STRICT_BYTE_CHAR
因为我需要混合使用 str
和 bytes
.
你快到了
%typemap(in, numinputs=0) (char **data) (char *temp) {
= &temp;
}
%typemap(argout) (char **data) {
if (*) {
$result = PyUnicode_FromString(*);
free(*);
}
}
请注意,这两个类型映射结合起来完成了这项工作。如果字符数组以 null 终止,则不需要该长度。参数 temp
已创建,对此的引用将传递给分配数组的 C 函数。
我的 C 库中有两个函数:
void passBytes(char *data, int size);
void returnBytes(char **data, int *size); //dynamically allocates
我使用这个
%typemap(in) (char *data, int size) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &, &len);
= (int)len;
}
但无法弄清楚如何使用 SWIG_PYTHON_STRICT_BYTE_CHAR
因为我需要混合使用 str
和 bytes
.
你快到了
%typemap(in, numinputs=0) (char **data) (char *temp) {
= &temp;
}
%typemap(argout) (char **data) {
if (*) {
$result = PyUnicode_FromString(*);
free(*);
}
}
请注意,这两个类型映射结合起来完成了这项工作。如果字符数组以 null 终止,则不需要该长度。参数 temp
已创建,对此的引用将传递给分配数组的 C 函数。