Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
上个月关闭。
我有一个C扩展名,我通过ctypes在python中调用。
C代码如下所示:
这样的Python代码:
因此,人们期望输出为“ 3.0”,但我得到的输出为“ -1398886288”。
我将其分解为一个简单的示例。我的实际应用程序要大得多,但在那里我也得到了一些奇怪的输出。也许我对ctypes有误吗?
进行此更改后,代码“有效”。但是它不会计算“和”,而是缩放一个数字。它还包含不必要的强制转换,并且不必要地拆分了声明和初始化。
通常,以下是实现此功能的首选方法:
或者,如果实际上是此功能的全部内容,请省略不必要的中间变量:
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
上个月关闭。
我有一个C扩展名,我通过ctypes在python中调用。
C代码如下所示:
double new(int t){
double sum;
sum = (double)t*(double)1.5;
return sum;
}
这样的Python代码:
import ctypes
fun = ctypes.CDLL("C:/test.so")
fun.new.argtypes = [ctypes.c_int]
fun.new.restypes = ctypes.c_double
fun.new(2)
因此,人们期望输出为“ 3.0”,但我得到的输出为“ -1398886288”。
我将其分解为一个简单的示例。我的实际应用程序要大得多,但在那里我也得到了一些奇怪的输出。也许我对ctypes有误吗?
最佳答案
它的拼写是restype
,而不是restypes
:
fun.new.restype = ctypes.c_double
进行此更改后,代码“有效”。但是它不会计算“和”,而是缩放一个数字。它还包含不必要的强制转换,并且不必要地拆分了声明和初始化。
通常,以下是实现此功能的首选方法:
double three_halves(int x) {
double result = x * 1.5;
return result;
}
或者,如果实际上是此功能的全部内容,请省略不必要的中间变量:
double three_halves(int x) {
return x * 1.5;
}
关于python - 使用C和ctypes计算的怪异行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59682904/
10-13 02:52