1
我面臨着一個問題,當我試圖使用加載浮動到Python程序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
,爲什麼?
的原因是'float'是無論從FPU組返回(如'的x87指令fstp' ),或者在x64中使用SSE寄存器(例如'xmm0')。所以'c_float'或'c_double'返回類型必須專門處理。默認的'c_int'結果(例如,來自x64寄存器'rax')是垃圾,與函數的返回值無關。 – eryksun