当前位置: 首页 > news >正文

网站解析后几天可以访问2022年小学生新闻摘抄十条

网站解析后几天可以访问,2022年小学生新闻摘抄十条,网站在国内.用美国服务器卡不卡,游戏推广网站如何做的一:Python调用C语言场景 1,已经写好的C语言代码,不容易用Python实现,想直接通过Python调用写好的C语言代码 2,C比Python快(只是从语言层面,不能绝对说C程序就是比Python快) 3&…

一:Python调用C语言场景

1,已经写好的C语言代码,不容易用Python实现,想直接通过Python调用写好的C语言代码

2,C比Python快(只是从语言层面,不能绝对说C程序就是比Python快)

3,想直接调用C语言丰富的库

二:Python的CTypes库

Python中调用C语言不止一种方法,常见的有:

1.SWIG,编写一个额外的接口文件来作为SWIG(终端工具)的入口

2.通过CTypes调用

3.使用Python/C API方法

但是 CTypes是最简单上手的一种,本文将用CTypes来演示如何在Python中调用C

可以先看看CTypes支持的类或者方法

>>> import ctypes
>>>
>>> dir(ctypes)
['ARRAY', 'ArgumentError', 'Array', 'BigEndianStructure', 'CDLL', 'CFUNCTYPE', 'DEFAULT_MODE', 'LibraryLoader', 'LittleEndianStructure', 'POINTER', 'PYFUNCTYPE', 'PyDLL', 'RTLD_GLOBAL', 'RTLD_LOCAL', 'SetPointerType', 'Structure', 'Union', '_CFuncPtr', '_FUNCFLAG_CDECL', '_FUNCFLAG_PYTHONAPI', '_FUNCFLAG_USE_ERRNO', '_FUNCFLAG_USE_LASTERROR', '_Pointer', '_SimpleCData', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_c_functype_cache', '_calcsize', '_cast', '_cast_addr', '_check_size', '_ctypes_version', '_dlopen', '_endian', '_memmove_addr', '_memset_addr', '_os', '_pointer_type_cache', '_reset_cache', '_string_at', '_string_at_addr', '_sys', '_wstring_at', '_wstring_at_addr', 'addressof', 'alignment', 'byref', 'c_bool', 'c_buffer', 'c_byte', 'c_char', 'c_char_p', 'c_double', 'c_float', 'c_int', 'c_int16', 'c_int32', 'c_int64', 'c_int8', 'c_long', 'c_longdouble', 'c_longlong', 'c_short', 'c_size_t', 'c_ssize_t', 'c_ubyte', 'c_uint', 'c_uint16', 'c_uint32', 'c_uint64', 'c_uint8', 'c_ulong', 'c_ulonglong', 'c_ushort', 'c_void_p', 'c_voidp', 'c_wchar', 'c_wchar_p', 'cast', 'cdll', 'create_string_buffer', 'create_unicode_buffer', 'get_errno', 'memmove', 'memset', 'pointer', 'py_object', 'pydll', 'pythonapi', 'resize', 'set_errno', 'sizeof', 'string_at', 'wstring_at']
>>>
 

其中cdll类对于我们接下来调用C非常有用处,我们通过help来查看cdll类,可以看到可以通过LoadLibrary来加载C的库(在Linux中是.so,在windows中是.dll)


三:实战

1,调用C语言的函数

首先我们在C语言中实现三个简单函数

#include<stdio.h>void cprintf()
{printf("Hello word!\n");return;
}int add(int a, int b)
{return a+b;
}int cscanf()
{int a;int b;scanf("%d %d",&a,&b);return a+b;
}

三个函数,一个是有打印函数,一个是有传参函数,一个是有输入函数,将C编译成动态库

gcc -fPIC -c ctest.c  -o ctest.o
gcc -shared -o libctest.so ctest.o

 

然后我们在Python中调用这三个函数,

from ctypes import *cLib = cdll.LoadLibrary('./libctest.so')cLib.cprintf()a = 1
b = 2
sum = cLib.add(a,b)
print(f'{a}+{b}={sum}')cSum = cLib.cscanf()
print(f'cSum={cSum}')

 运行

可以看到运行结果与我们想要的结果一致

2,调用C语言返回值是指针的函数

C代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define uint8_t   unsigned char
#define uint16_t  unsigned shorttypedef struct TagMyStruct
{char name[10];uint8_t age;int score;
} MyStruct,*MyStructPointer;MyStructPointer cstruct_get_data_pointer() // 返回结构体指针
{MyStructPointer pt = (MyStructPointer)malloc(sizeof(MyStructPointer));strcpy(pt->name, "ftz");pt->age = 18;pt->score = 88;return pt;
}MyStruct cstruct_get_data_self() // 返回结构体
{return (MyStruct){"csdn",100,99};
}

python调用

from ctypes import *cLib = cdll.LoadLibrary('./cstruct.so')class MyStruct(Structure):_fields_ = [('name', c_char*10),('age', c_ubyte),('score', c_int),        ]cLib.cstruct_get_data_self.restype = MyStruct #指定函数返回值结构体本身
dat = cLib.cstruct_get_data_self() 
print("=====get struct self from .so function=======")
print("name=",dat.name)
print("age=",dat.age)
print("score=",dat.score)cLib.cstruct_get_data_pointer.restype = POINTER(MyStruct) #指定函数返回值结构体指针
dat = cLib.cstruct_get_data_pointer() 
print("=====get struct point from .so function=======")
print("name=",dat.contents.name)
print("age=",dat.contents.age)
print("score=",dat.contents.score)

运行结果

http://www.dinnco.com/news/59014.html

相关文章:

  • 炫酷网站欣赏百度热门排行榜
  • 广东中国移动网站优质外链平台
  • 个人网站制作新手教程怎么快速优化网站
  • 制作好的网站bing搜索引擎入口官网
  • 深圳做网站价比高的公司性人工智能培训心得体会
  • WordPress数字销售源码重庆seo论坛
  • 短视频制作培训班seo技术软件
  • 给人做时时彩网站建设做推广
  • 徐州网站建设魔站百度推广登陆后台
  • 公司宣传片ppt模板seo网站排名优化公司
  • 上海网站制作公司哪家seo应该怎么做
  • 重庆网站供奉战犯自学seo能找到工作吗
  • 虚拟机可以做多个网站百度广告推广怎么做
  • 寻甸马铃薯建设网站百度 搜索热度
  • 简单的网站设计模板下载线上营销策略有哪些
  • 深圳做微信网站公司长沙seo优化推广公司
  • 长沙 外贸网站建设公司价格全网营销系统是不是传销
  • 怎样给公司做一个网站搜索引擎名词解释
  • 广东企业网站模板推荐seo网站优化论文
  • 网站的中英文切换怎么做的电商网站建设方案
  • 架子鼓谱那个网站做的好俄罗斯搜索引擎
  • 珠海市网站建设哪家好关键词在线听免费
  • 做暧暧小视频网站网络服务器价格
  • 怎么夸客户网站做的好南京网络推广优化哪家好
  • 网站服务器租用多少钱一年合适网站快速排名推广软件
  • 长沙做黄叶和网站的公司有哪些关键词查找网站
  • 上市公司网站建设评价百度seo快速
  • 怎么给自己喜欢的人做网站怎么制作百度网页
  • 亚购物车功能网站怎么做的亚洲7号卫星电视
  • 室内设计很多人都干不下去了优化大师电脑版下载