我有一些C代码,我试图在python中从ctypes访问它们。一个特定的函数看起来像这样:
float *foo(void) { static float bar[2]; // Populate bar return bar; }
我知道这不是一个理想的C语言编写方法,但它在这个例子中确实起了作用。我正在努力编写python来获取响应中包含的两个浮点数。我很好单变量的返回值,但我无法从ctypes文档中找到如何处理指向数组的指针。有什么想法吗?
zzzyeukh1#
将重新类型指定为[POINTER][1](c_float):
[POINTER][1](c_float)
import ctypes libfoo = ctypes.cdll.LoadLibrary('./foo.so') foo = libfoo.foo foo.argtypes = () foo.restype = ctypes.POINTER(ctypes.c_float) result = foo() print(result[0], result[1])
slsn1g292#
感谢@falsetru,相信我找到了一个更好的解决方案,它考虑了C函数返回一个指向两个浮点数的指针的事实:
import ctypes libfoo = ctypes.cdll.LoadLibrary('./foo.so') foo = libfoo.foo foo.argtypes = () foo.restype = ctypes.POINTER(ctypes.c_float * 2) result = foo().contents print('length of the returned list: ' + len(result)) print(result[0], result[1])
2条答案
按热度按时间zzzyeukh1#
将重新类型指定为
[POINTER][1](c_float)
:slsn1g292#
感谢@falsetru,相信我找到了一个更好的解决方案,它考虑了C函数返回一个指向两个浮点数的指针的事实: