You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:42:02