Python通过ctypes调用C语言函数返回值类型错误为int的问题
问题原因
ctypes对未显式声明返回值类型的C函数,默认使用int作为返回值类型,你的C函数返回的float二进制数据会被直接按照int规则解析,因此会出现返回值类型错误、数值不符合预期的问题。
解决方法
在调用map3函数前,显式指定该函数的返回值类型为c_float即可,也可以同步声明参数类型,避免传参类型匹配错误。
修正后的代码如下:
from ctypes import * c_funcs = CDLL("./myf.so") # 声明函数返回值类型 c_funcs.map3.restype = c_float # 可选:声明函数参数类型,提前校验传参 c_funcs.map3.argtypes = [c_float, c_float, c_float, c_float] def map_num(value, Max, wanted_min, wanted_max): x = c_funcs.map3(c_float(value), c_float(Max), c_float(wanted_min), c_float(wanted_max)) print(type(x)) return x print(map_num(10, 100, -1, 1))
修改后运行即可得到正确的float类型返回值-0.8。
内容的提问来源于stack exchange,提问作者Amit Davidi
相关产品推荐
相关产品推荐

