【问题标题】:Ctypes: transferring string from C(++) to PythonCtypes:将字符串从 C(++) 传输到 Python
【发布时间】:2017-06-05 07:06:30
【问题描述】:

我已经为此苦苦挣扎了将近一个星期,也许有人可以在这里帮助我?简而言之,我用 C++ 编写了一个程序,并希望将其与 Python 链接(以使用 Flask 或 Django 构建 Web 应用程序)。

我的 C 函数会返回一个 int、char 或 void 工作正常,问题是它们何时应该返回一个字符串。我或多或少了解问题的原因(我的 C 函数返回一个指针,我的 Python 函数无法将其作为有用数据处理)。

所以这是我编写的示例代码。在我的 main.cpp 文件中,我具有以下功能:

extern "C" {
  int addint(int a) {
    return a + 1;
  }

  const char* hello() {
    return "hello";
  }
}

在我的 pywrapper.py 文件中,我有以下内容:

def addint(number):
    result = lib.addint(c_int(number))
    return result

def saystr():
    result = lib.hello()
    return result

if __name__ == "__main__":
    print('addint: ', addint(5))
    print('saystr: ', saystr())

我的输出是:

addint:  6
saystr:  -354261249

所以第一个函数可以正常工作。但是我该怎么做才能让第二个函数返回 'hello'??

【问题讨论】:

    标签: python c++ c string ctypes


    【解决方案1】:

    作为ctypes documentation shows,你需要明确告诉它如何处理返回类型:

    def saystr():
        lib.hello.restype = c_char_p # pointer to a string
        result = lib.hello()
        return result
    

    否则默认返回类型为int(并将返回的指针转换为整数地址)。

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2020-08-01
      • 2019-07-28
      • 2011-03-30
      • 2020-05-28
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多