当我尝试使用ctypes
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
,为什么?
答案 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]