微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python如何通过SWIG从C ++获取二进制数据char *?

如何解决Python如何通过SWIG从C ++获取二进制数据char *?

C / C ++字符串以NULL终止,这意味着第一个\0字符表示字符串的结尾。

函数返回指向此类字符串的指针时,调用方(在本例中为SWIG)无法知道在第一个字符串之后是否还有更多数据,\0因此这就是为什么只获得第一部分的原因。

因此,第一件事就是更改您的C函数,使其不仅返回字符串,还返回其长度。由于只能有一个返回值,因此我们将使用指针参数。

void fun(char** s, int *sz)
{
    *s = "abc\0de";
    *sz = 6;
}

SWIG文档建议使用该cstring.i包装此类功能。特别是,最后一个宏完全可以满足您的需求。

%cstring_output_allocate_size(parm, szparm, release)

阅读文档以了解如何使用它。

解决方法

我在SWIG的Python中使用C 函数,现在遇到了一个问题。当我将char *从C 传递给Python时,char *被Python截断。

例如:

example.h:

char * fun()
{
    return "abc\0de";
}

现在在Python中,我们称为example.fun(),它仅打印“ abc”而不是“ abc \ 0de”,Python删除“ \ 0”后面的数据。

我想从C ++中的fun()获取所有字符(它是一个可以包含’\ 0’的二进制数据),我们不胜感激

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。