首页 > 编程语言 >Python调用C动态库并通过bytes传参

Python调用C动态库并通过bytes传参

时间:2023-11-08 17:57:33浏览次数:36  
标签:传参 src Python bytes char test out ct

通过Python内建库ctypes调用C语言。

#!/usr/bin/python3

# file : bytes_test.py

import ctypes as ct
import os

# 编译C程序为动态库
os.system("gcc -fpic -shared bytes_test.c -o bytes_test.dll")

# 加载动态库
clib = ct.CDLL("./bytes_test.dll")

# 分配内存
src = b"0123"
out = bytes(len(src))

print(f"src={src}, out={out}")

# 取指针
src_ptr = ct.cast(src, ct.c_char_p)
out_ptr = ct.cast(out, ct.c_char_p)

# 调用C函数
clib.copy(out_ptr, src_ptr, len(src))

print(f"src={src}, out={out}")

// file : bytes_test.c

int copy(unsigned char *out, unsigned char *src, int size)
{
	int i;
	
	for(i=0; i<size; ++i){
		out[i] = src[i];
	}
	return i;
}

标签:传参,src,Python,bytes,char,test,out,ct
From: https://www.cnblogs.com/santion/p/17817979.html

相关文章

  • pyspark UDF调用自定义python函数
    从PysparkUDF调用另一个自定义Python函数Python编码的PySparkUDF提供了调用其他Python函数的能力,无论它们是内置函数还是来自外部库的用户定义函数。通过使用户能够利用现有的Python代码,此功能提高了UDF的模块化和可重用性。在分布式PySpark环境中,用户可以轻松实......
  • Python学习心得
     1.学习资源:2.开始学习Python之前,选择一些适合初学者的学习资源,如在线教程、教科书和视频课程。一些常用的学习资源包括Python官方文档、Coursera、edX、Udemy等在线学习平台。3.安装和环境设置:4.安装Python解释器。你可以从Python官方网站下载最新的Python版本,并按照官方文......
  • Python中的13个搔操作
    字符串操作1.字符串的翻转#方式一s='helloworld'print(s[::-1)#方式二fromfunctoolsimportreduceprint(reduce(lambdax,y:y+x,s))2.判断字符串是否是回文利用字符串翻转操作可以查看字符串是否回文s1='abccba's2='abcde'deffunc(s):ifs==s......
  • Python处理日期方法大全、三十种方法
    一、使用time模块展示当前日期和时间importtimefromtimeimportgmtime,strftimet=time.localtime()print(time.asctime(t))#SunMay709:30:372017print(strftime("%a,%d%b%Y%H:%M:%S+0000",gmtime()))#Sun,07May201704:00:37+0000print(st......
  • 第三方组件及计算属性传参的问题解决方式
    1.前言唉,好想玩滋嘣。2.计算属性直接传参接收不到表格数据某一列需要用的计算属性时,模板中使用计算属性fullName就会直接调用fullName函数,而在模板中fullName(item)相当于fullName()(item),此处为函数柯里化。<el-table-columnlabel="名称"align="center"min-width=......
  • python 图书借阅系统
    importtkinterastkfromtkinterimportmessageboxclassApplication(tk.Frame):def__init__(self,library,master=None):super().__init__(master)self.library=libraryself.grid()self.create_widgets()defcrea......
  • 常用python自动化脚本
    目录自动化文件管理使用Python进行网页抓取文本处理和操作自动发送电子邮件自动化Excel电子表格与数据库交互自动化系统任务网络自动化数据清理和转换自动化PDF操作1.自动化文件管理1.1-排序目录中的文件# Python脚本,用于根据文件扩展名对目录中的文件进行排序i......
  • python初学者学习笔记-第七章-面向对象
    chapter7/面向对象7.1面向对象基础7.1.1定义类:同一类的属性和方法的集合;对象:类的实例化就是对象;7.1.2特征类的三大特性:封装,继承,和多态;封装封装就是将属性和方法相捆绑,形成一个整体;封装可以提高程序的简洁性和安全性;使用者只需调用程序的相关接口,不必关注程序的实现......
  • python实现STL模型文件体积表面积计算
    没有什么特殊的算法,直接用包,开箱即用fromstlimportmeshimportnumpyasnp#读取stl文件filename='./text.stl'mesh_data=mesh.Mesh.from_file(filename)xyz=(mesh_data.max_-mesh_data.min_)sizel=round(xyz[0]/10,2)sizew=round(xyz[1]/10,2)s......
  • python初学者学习笔记-第八章-模块和包
    chapter8/模块和包8.1.模块8.1.1模块简介类、函数、变量等,都可重复使用。为了方便调用,我们通常把他们放到Python文件之中。单个文件的代码阅读和调用都比较混乱。代码最好分开存储,相似功能的代码放在一起。模块可以帮助我们实现这样的功能。后缀为py的文件都是python的......