python利用ctypes的指针传入int型列表和string类型列表到c语言中
来源:互联网 发布:微观经济学十八讲 知乎 编辑:程序博客网 时间:2024/06/03 18:04
下面这个方法是将c语言的函数编译为动态链接库,然后python调用得到结果。这个c语言中没有main函数,是因为python只需要调用它的方法。
将它和c++结合,用c++操作这个python的list,就需要用到extern “C”了。。。后续会出~~
如果有大神可以不用extern”C”直接调用c++的,请留言,感谢分享
#include <stdio.h>void get_str_list(int n, char *b[2]){ printf("in c start"); for(int i=0;i<n;i++) { printf("%s", *(b+i)); printf("\n"); } printf("in c end");}void get_point_int(int n, int *b){ printf("in c start\n"); for(int i=0;i<n;i++) { printf("%d", *(b+i)); printf("\n"); } printf("in c end\n");}void get_point_str(int n, char *b[]){ printf("in c start\n"); for(int i=0;i<n;i++) { printf("%s", *(b+i)); printf("\n"); } printf("in c end");}
将上面的c语言编译为动态链接库
gcc -o hello2.so -shared -fPIC c_p.c
对应的python代码(这里注意ll后面是动态链接库的路径)
from ctypes import *ll = cdll.LoadLibrarylib = ll("./12_23_ctype_list/hello2.so")n = 3str1 = c_char_p(bytes("nihao", 'utf-8'))str2 = c_char_p(bytes("shijie", 'utf-8'))lists = [str1, str2]print(enumerate(lists))a = (c_char_p*2)(str1, str2)lib.get_str_list(2, a)b = [1,23,345]b_arr = (c_int*3)(*b)lib.get_point_int(3, b_arr)c = ["hello", "world", "ni", "hao"]str_c1 = c_char_p(bytes("hello", "utf-8"))str_c2 = c_char_p(bytes("world", "utf-8"))str_c3 = c_char_p(bytes("ni", "utf-8"))str_c4 = c_char_p(bytes("hao", "utf-8"))c = [str_c1, str_c2, str_c3, str_c4]c_arr = (c_char_p*4)(*c) # 传入一个python的list的指针lib.get_point_str(4, c_arr)
结果:
<enumerate object at 0x7f78598fe3a8>in c startnihaoshijiein c endin c start123345in c endin c starthelloworldnihaoin c end
附上一幅python类型转ctypes类型再转c++类型的汇总图:
阅读全文
0 0
- python利用ctypes的指针传入int型列表和string类型列表到c语言中
- python3利用ctypes传入一个字符串类型的列表
- python使用 C语言类型、ctypes 的用法
- C语言中int到float的强制类型转换
- C语言中int到float的强制类型转换
- python 将元组,列表中int 类型转为str
- 如何在c语言中使用java传入的String
- python 中如何使用 C 类型的数组? ctypes 的用法
- python中使用 C 类型的数组以及ctypes 的用法
- 指针问题:C语言中 int*p[4] 和 int(*p)[4]的区别 等等
- C语言中列表的使用
- Python语言中的列表类型--Python(14)
- Python--使用xlwt将列表类型的数据写到Excel xls文件中--TxtToExcel
- c语言指针与int类型相加
- Python 语言list 列表类型中的 extend() 和 append() 的区别
- Java 语言中 int 和 String 以及char类型的互换
- java中int类型和String类型的相互转换
- C语言中int到float的强制类型转换(转)
- 教练技术培训系列篇三——高效学习
- 程序员薪酬到底有多高?来看硅谷的工程师统计
- bzoj1113 [Poi2008]海报PLA(单调栈)
- HashMap,Hashtable,HashSet的区别
- 【Linux】初识线程
- python利用ctypes的指针传入int型列表和string类型列表到c语言中
- SQL手工注入语句及原理
- 【备忘】最新Python自然语言分析视频课程下载
- JavaEE软件开发体系架构
- 各种距离(I)闵可夫斯基距离和它的朋友们
- MCS + JET学习笔记
- finereport破解 lic 下载地址
- java 开发模式之九 : 模板方法模式
- 剑指offer 编程题(34):数组中的逆序对