ctypes浮动垃圾返回

时间:2015-10-08 15:44:37

标签: python ctypes

当我尝试使用ctypes

将float加载到python程序时,我遇到了问题

C代码:

float test_ret_float(){
  return 1.0;
}

在Python中,垃圾产生了各种方式:

print lib.test_ret_float()
>>1074161254
print c_float(lib.test_ret_float()).value
>>1074161280.0

如果int一切正常。

看来,类型对话没有按预期工作,并且实际返回的raw 4字节值不会转换为float而是转换为int,为什么?

2 个答案:

答案 0 :(得分:2)

问题是我错过#undef NULL来设置:

restype

解决问题

答案 1 :(得分:0)

我知道这已经为时已晚,但是对于任何搜索此内容并可能正在寻找与我相同的问题的人。

用法:如果您将变量as和参数传递给指针,并且C函数更改将其替换为浮点数,则您可以将python解释(整数)值重新打包为带有信号的32位浮点数

def ieee754(value):
    """Repackages values to 32bit floating point"""
    packed_v = struct.pack('>L', value)
    return struct.unpack('>f', packed_v)[0]