Ctypes:将字符串从 C(++) 传输到 Python
Ctypes: transferring string from C(++) to Python
我已经为此苦苦挣扎了将近一个星期,也许有人可以帮助我吗?简而言之,我用 C++ 编写了一个程序,并希望用 Python link 它(用 Flask 或 Django 构建一个 Web 应用程序)。
我的 C 函数可以 return 一个 int、char 或 void 工作正常,问题是它们什么时候应该 return 一个字符串。我或多或少明白问题的原因是什么(我的 C 函数 return 是一个指针,我的 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
所以第一个函数工作正常。但是我可以为 return 'hello' 的第二个函数做些什么呢??
作为ctypes documentation shows,你需要明确告诉它如何处理return类型:
def saystr():
lib.hello.restype = c_char_p # pointer to a string
result = lib.hello()
return result
否则默认的return类型是int
(并且returned指针被转换为整数地址)。
我已经为此苦苦挣扎了将近一个星期,也许有人可以帮助我吗?简而言之,我用 C++ 编写了一个程序,并希望用 Python link 它(用 Flask 或 Django 构建一个 Web 应用程序)。
我的 C 函数可以 return 一个 int、char 或 void 工作正常,问题是它们什么时候应该 return 一个字符串。我或多或少明白问题的原因是什么(我的 C 函数 return 是一个指针,我的 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
所以第一个函数工作正常。但是我可以为 return 'hello' 的第二个函数做些什么呢??
作为ctypes documentation shows,你需要明确告诉它如何处理return类型:
def saystr():
lib.hello.restype = c_char_p # pointer to a string
result = lib.hello()
return result
否则默认的return类型是int
(并且returned指针被转换为整数地址)。