目录:
1.为什么需要数据类型的转换?
2.C与python数据类型转换的原理:
3.python调用不同C数据类型的实例:
(一)为什么需要数据类型的转换?
对于不同编程语言,他们的数据类型不一样,占用内存的情况也不一样,在Python调用C语言的过程中,其数据类型的占用内存就是不一样的,对于C语言的函数来说,传输的实参与形参的数据类型不一样,就有可能造成计算错误,所以数据类型的转换是为了解决不同语言的数据占用内存的不同。
(二)C与python数据类型转换的原理:

对应表如下:

(三)python调用不同C数据类型的实例:
(1).c原文件:(double类型的加法)
// 求和
__declspec(dllexport)
double add_c(double x, double y)
{
return x + y;
}
(2)没有数据转换的.py文件 python调用:
# 导入ctypes模块
import ctypes
from ctypes import *
# 引用Demo_dll.dll文件, ./表示当前目录
adder = CDLL("./Cmath.dll")
result = adder.add_c(3.15, 4.5)
print(result)
没有运作成功:报错如下
Traceback (most recent call last):
File "D:/00 Desktop/Desktop/python调用C语言程序/test1.py", line 7, in <module>
result = adder.add_c(3.15, 4.5)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1
(3)转换数据后的调用 .py文件:
# 导入ctypes模块
import ctypes
from ctypes import *
# 引用Demo_dll.dll文件, ./表示当前目录
adder = CDLL("./Cmath.dll")
# 使python的数据类型对应C语言的数据类型,才能正确传值
"""
把python中的float类型的数据-->C语言中的double类型
"""
a = c_double(3.15)
b = c_double(4.5)
# 设置C语言函数的函数的返回值得类型,用函数.restype = ctype的数据类型
"""
把C语言中的add_c函数的返回值对应C_double
"""
adder.add_c.restype = c_double
result = adder.add_c(a, b)
print(result)
调用成功,结果如下:
7.65
网友评论