Ctypes:将字符串从C(++)转移到Python

时间:2017-01-20 10:19:10

标签: python c++ c string ctypes

我已经挣扎了近一个星期,也许有人可以帮助我吗?简而言之,我用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'

1 个答案:

答案 0 :(得分:1)

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

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

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