将 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++字符串LPCTSTR格式转化为char*

如何将 C++ 中的空字符序列转换为 Python 中的等效字符?

在 Linux 中使用 SWIG for Python 转换字符串

将 MFC 类转换为 C++ 标准库

将 C++ 类转换为 JSON

c++字符串转换为枚举类型