如何让SWIG将const char*返回值按二进制数据处理,适配Python调用
实现方案
1. 限定typemap作用范围
你之前的写法会全局匹配所有返回const char*的函数,要避免这个问题,可以在typemap声明时指定目标函数名,仅对getName生效:
%typemap(out) const char* getName { $result = PyBytes_FromStringAndSize($1, $3); }
如果有多个参数结构相同的同类函数,也可以匹配参数列表实现批量生效,无需逐个指定函数名:
// 匹配所有参数为(int, int, size_t)、返回值为const char*的函数 %typemap(out) const char* (int, int, size_t) { $result = PyBytes_FromStringAndSize($1, $3); }
2. out typemap访问输入参数的方法
SWIG typemap中可以通过$n内置变量直接访问函数的第n个输入参数,n从1开始按参数列表顺序计数:
$1:对应getName的第一个参数arg1$2:对应getName的第二个参数arg2$3:对应getName的第三个参数byteCount,也就是你需要的字节长度值
完成上述配置后,Python侧调用getName时就会直接返回对应长度的字节串,不会影响其他返回普通空终止字符串的const char*函数。
内容的提问来源于stack exchange,提问作者mojo
相关产品推荐
相关产品推荐

