将 C++ 字符串类转换为 Python 字符串
Posted
技术标签:
【中文标题】将 C++ 字符串类转换为 Python 字符串【英文标题】:Converting a C++ String Class to a Python String 【发布时间】:2015-04-01 12:40:38 【问题描述】:我有一个能够以普通 ASCII 或宽格式输出字符串的 C++ 类。我想将 Python 中的输出作为字符串获取。我正在使用 SWIG(版本 3.0.4)并已阅读 SWIG 文档。我相信我需要使用 typemap 构造来实现我的目标。我写了以下内容:
%typemap(out) my_namespace::MyString *
$result = PyString_AsString($1);
没有成功。当我尝试从 Python 访问 C++ 字符串时,我得到以下输出:
<Swig Object of type 'MyString *' at 0x02B6FC68>
显然,我做错了什么。谁能指出我正确的方向?提前致谢。
【问题讨论】:
【参考方案1】:我将 pyboost 用于 C++/python 接口,而且很容易做到这一点。如果可以的话,我推荐它。一个简单的 std::string 会自动映射到 python 字符串。在您的情况下,可能任何解决方案都是定义一个
__str __
对象的方法或直接传递一个 char*(我在 swig docs 中看到了这一点,但我从未遵循这种方式)。
【讨论】:
【参考方案2】:原来正确的解决方案是:
%typemap(out) my_namespace::MyString &
$result = PyString_FromFormat($1->c_str());
不是很直观,但很有效。
【讨论】:
你应该使用PyObject* PyString_FromString(const char *v)
而不是格式。以上是关于将 C++ 字符串类转换为 Python 字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将 C++ 中的空字符序列转换为 Python 中的等效字符?