Python调用 C++验证码函数+实战开发

前言

我们都知道python的跨平台能力强,可以在不同操作系统上使用。它的可扩展性也很强,它可以混合使用C语言和Java。那么今天就来学习一下,python对c语言的扩展使用。

1 为什么要调用C

我们都知道python的第三方库很多,基本c能干的事它都可以干,可是为什么还要调用c呢?
1、因为c在国内的发展很早,目前有很多C已经封装好的功能函数,为了方便起见,我么们就可以直接用python调用它。这样就会省掉很多麻烦。
2、我们再用python写代码时,当然会有很多代码我们不希望被别人看到,这样我们就可以将这段代码用c语言进行编写,然后再python中调用,这样会起到加密效果。

2 配置C编译环境

这个我是早上用的时候发现的,因为我的C编译环境安装到了我的移动固态,所以早上再生成.so文件时半天无法识别所以我就试着插上我的移动固态,结果成功了。所以可能还的需要安装c编译环境。安装mingw-w64编译器,安装挺简单的,百度都有可以自行查找一下,安装完成之后记得配置资源环境。我大概说一下怎么配置,其实配置方法安装mingw-w64编译器的方法里基本都会讲的。在这里插入图片描述
例如我的编译器再这里安装的
在这里插入图片描述

3 写一个简单的c函数

#include "stdio.h"
char*  test()
{
    char *a = {"你好"};
    return a;
    }

然后再终端输入一下代码,记得你的c文件名和下方的代码.so一定要一致。
写完后然后回车执行,执行完后就会生成一个.so文件

gcc -o test.so --share -fPIC test.c

在这里插入图片描述
输入命令时注意你的文件名在这里插入图片描述
之后会生成一个.so文件在这里插入图片描述

4 在python中用ctypes模块导入

在这里我写了这么多str相关参数是为了区分如何将c函数的数据正确打印出来。

from ctypes import *    #  导入模块
dll = CDLL("./test.so")  #   c文件和.so文件一定要在当前python工程文件下
str = dll.test()     
str1 = string_at(str)
str2 = str1.decode('utf-8')
#方法1:失败
print(type(str))
print(str)
#方法2:失败
print(type(str1))
print(str1)
#方法3:成功
print(type(str2))
print(str2)

我们来看一下执行效果
在这里插入图片描述
很显然str2才是我们想要的结果,所以在调用时注意返回的格式

5 开发实战

实战项目功能之一:用c写一个随机生成4位的验证码,并在python中pyqt5的ui界面将验证码显示出来。
首先我们先将随机生成验证码的函数用C语言写出来。

4位验证码随机生成函数
在这里插入图片描述

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char b[4];
char a[63]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";//定义一个包含63个字符的字符串
char* code()
{
int i,j;
srand((int)time(0));//初始化随机数发生器
for(i=0;i<4;i++)
{
j= rand()%62;//取得0~61的随机数
b[i]=a[j];
}
return b;
}

然后在终端写 gcc -o code.so --share -fPIC code.c回车执行
在这里插入图片描述
然后在主函数中先封装,再调用。
在这里插入图片描述在这里插入图片描述下来看看展示效果
在这里插入图片描述

总结

其实这个用c语言写得随机生成验证码的代码不是我写得,而是一个可爱的小仙女帮我写的,我就是为了方便,然后直接在python中调用它去实战开发,顺便也巩固今天的知识点。确实省了不少的力。再次感谢这位可爱的小仙女。

如果悲观可以轻易的被外在的成功打消,我敢断定那不是悲观,而是肤浅的烦恼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值