PYTHON调用C接口(基于Ctypes)实现stein算法最大公约数的计算
相关环境配置
- mingw,选择相应的32位、64位的版本,主要用于编译动态链接库dll文件,可用vs替代,这里我选择轻量级的mingw
- windows64位地址:https://sourceforge.net/projects/mingw-w64/
- 安装过程中 Architecture选项选择X86_64,其他默认即可,把安装好的mingw的bin目录加入环境配置的PATH列表
一、编写C函数
/*最大公约数算法*/ unsigned int gcd(unsigned int a,unsigned int b)
{
unsigned int k=;
if (a==) return b;
else if (b==) return a;
while((!(a&))&&(!(b&))){
k<<=;
a>>=;
b>>=;
}
while(!(a&))a>>=;
while(!(b&))b>>=;
if(a<b) a^=b,b^=a,a^=b;
while(a!=b){
a-=b;
if(a<b) a^=b,b^=a,a^=b;
}
return k*a;
}
二、编译动态链接库
为了编译成动态链接库,在入相应导出动态链接库的代码,完成后保存为.c的c文件,本例保存为 stein_gcd.c
/*最大公约数算法*/ #ifdef _MSC_VER
#define DLL_EXPORT __declspec( dllexport )
#else
#define DLL_EXPORT
#endif DLL_EXPORT unsigned int gcd(unsigned int a,unsigned int b){
/*...省略上述c代码块*/
}
在c文件目录打开powshell,执行命令
gcc -m64 -fPIC -shared -msse4 stein_gcd.c -o stein_gcd.dll
完成后会得到动态链接库 stein_gcd.dll
三、PYTHON调用动态链接库
用Ctypes调用dll
from ctypes import *
steingcd = cdll.LoadLibrary('stein_gcd.dll')#dll参数是dll的路径
print(steingcd.gcd(39,26))
简单的demo就完成了。更多细致的比如Ctypes的各类型连接python和c时对应的数据类型,则去细致的翻看ctypes文档,当然也还有更多的方法,比如直接编译成python直接调用的库,懒先不写了
PYTHON调用C接口(基于Ctypes)实现stein算法最大公约数的计算的更多相关文章
- python调用ice接口
今天用python调用ice接口,遇到如下提示 ImportError: No module named Ice 解决方案是 set PYTHONPATH=C:\Program Files\ZeroC ...
- python 调用RESTFul接口
本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...
- Python调用API接口的几种方式 数据库 脚本
Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...
- Python调用API接口的几种方式
Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...
- python调用zabbix接口实现Action配置
要写这篇博客其实我的内心是纠结的,老实说,我对zabbix的了解实在不多.但新公司的需求不容置疑,当我顶着有两个头大的脑袋懵懵转入运维领域时,面前摆着两百多组.上千台机器等着写入zabbix监控的需求 ...
- python调用RPC接口
要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: https://grpc.io/docs/tutorials/basic/python.html 需要安 ...
- Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口
WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...
- Python调用服务接口
#! /usr/bin/env python # coding=utf-8 ############################################################## ...
- python调用webservice接口
使用suds这个第三方模块 from suds.client import Clienturl = 'http://ip:port/?wsdl'cilent=Client(url)print cile ...
随机推荐
- 3 Suggested Oracle Certifications For Oracle Form's Developers
The following are the most suggested Oracle Certifications for Oracle Application Developers in Form ...
- dedecms调用文章发布日期
<span>[field:pubdate function="MyDate('m-d',@me)"/]</span>
- Youtube深度学习推荐系统论文
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf https://zh ...
- 清空catalina.out报错Permission denied
今天在清空catalina.out的时候报错 [yangkun@sg logs]$ sudo echo '' > catalina.out -bash: catalina.out: Permis ...
- windows 控制台cmd乱码的解决办法
windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Name: Microsoft Windows 10 企业版 OS Version: 10.0.14393 N/A Build 1 ...
- vue v-model使用说明
1.概述 v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值而总是将 Vue 实例的数据作为数据来源.你应该通过 JavaScript 在组件的 data ...
- Vue 响应式属性
本文参考自:https://www.w3cplus.com/vue/vue-reactivity-and-pitfalls.html 1.概述 当创建一个Vue实例时,每个数据属性.组件属性等都是可以 ...
- MongoDB 快速入门
本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. MongoDB No ...
- 解析iscroll-小demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 深入了解Struts1的执行机理
要说Struts1的工作流程.就必需要说一下Model1和Model2了.由于这个框架是踏着他们的尸骨一步一步的发展起来的. Model1开发模式,想想我们刚刚開始接触Java的时候,我们用的就是这样 ...