我有一个返回a的交流功能long double
.我想使用ctypes从python中调用这个函数,它主要起作用.设置so.func.restype = c_longdouble
可以解决问题 - 除了python的float类型是c_double
如此,如果返回的值大于double,但是在long double的范围内,python仍然将inf作为返回值.我是64位处理器,sizeof(long double)
是16.
没有修改c代码的任何想法(例如使用十进制类或numpy)?
我不确定你是否可以在不修改 C 代码的情况下做到这一点。ctypes 似乎对long double
s 的支持非常糟糕 - 你根本不能像数字一样操作它们,你所能做的就是在本机 Python 类型之间来回转换它们float
。
你甚至不能使用字节数组作为返回值而不是 a c_longdouble
,因为 ABI - 浮点值不会%eax
像正常返回值一样在寄存器或堆栈中返回,它们是通过硬件传递的 -特定的浮点寄存器。
归档时间: |
|
查看次数: |
2139 次 |
最近记录: |