C++
文章平均质量分 63
一只揪°
一个啥都不会的通信菜鸟,专注于通信网络、信息安全、物联网方向的学习。读文献读文献读文献,做毕设做毕设做毕设,学英语学英语学英语,发文章发文章发文章。
展开
-
openssl从证书中提取公钥
如何用openssl从证书中提取公钥原创 2022-06-27 14:05:19 · 3712 阅读 · 0 评论 -
Googletest:大型项目单元测试框架
前言基础知识这个流程有没有问题?答:不确定 新加模块或者功能辅助函数别人能否使用。涉及单元测试的概念单元测试:确保程序的所有逻辑都能跑到。以函数为单位类进行测试人为规定什么是好的测试框架?测试独立可重复。测试应该得到良好的组织,并反映测试代码的结构。测试应该是 可移植的 且 可复用的。当测试失败时,它们应该提供尽可能多的关于故障的 信息。测试框架应该将测试编写者从家务活中解放出来,并让他们将精力集中在测试 内容 上。测试要 快。Gtest的事件机制全局事件测试用原创 2022-03-08 10:25:02 · 233 阅读 · 0 评论 -
STM32F4系列之ADC模数转换实验
STM32F4 ADC介绍简介模数转换器,将模拟信号转换为数字信号。转换原理主要为逐次逼近型、双积分型、电压频率转换型三种。而本ADC呢是逐次逼近型的模拟数字转换器。STM32F4系列一般都有3个ADC,这些ADC可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F4的ADC是12位逐次逼近型的模拟数字转换器。多达19个复用通道,可以测量来自16个外部源、2个内部源和Vbat通道的信号。这些通道的A/D转换可以单次、连续、扫描或间断模式执行。结果可以左对齐(4-15位)或右对齐(原创 2021-01-19 19:06:40 · 5586 阅读 · 0 评论 -
C语言学习之字符串:替换空格
替换空格函数描述函数:char *replace_blank(char *source)功能:将字符串中的空格替换为"%20"的字符串。思路:while(字符串未到末尾\0){ if(此处字符为空格) { 子函数:删除空格符; 子函数:字符串向后挪动可以插入数组的空间; 子函数:将目标数组插入到字符数组的前几位; 字符串向后移位跳过插入的数组; } 如果没有空格符,则再向后移位判断;}难点:涉及到的子函数较多,由于数组插入操作本身就是需要移位再插入,需要基本的原创 2021-01-07 14:56:51 · 1596 阅读 · 0 评论 -
C语言学习之字符串:统计文章出现的字符串
单词统计函数函数描述函数:statistics(FILE *fd)程序功能:统计文章中各个单词出现的次数缺点:无法识别出名字以及特殊的名词,只能全都先换成小写识别。源代码void statistics(FILE *fd) { char buff[MAXWORD]; int len; char *tail; int count; int i = 0, k = 0; int flag = UNEXIST;//判断重复标志位 char head = *buff;//避免开原创 2021-01-07 13:27:20 · 252 阅读 · 0 评论 -
VS调试:函数断点与数据断点
断点,是Debug过程中最常用的功能。但是,关于断点VS还有很多高级功能,本文使用的是VS2017,介绍函数断点与数据断点的使用场景以及使用方法。1.普通断点普通断点是最常接触的断点,VS中,在代码行左边栏灰色区域点击,或者把光标放在某代码行按下F9即可设置断点。这种断点,其实更多可能是设置在某个语句上,可以执行这句语句前所有代码,运行到改行停止且未执行该行代码。进入调试后,还可以选择逐语句(快捷键F10),逐过程(快捷键F11)调试。停滞在语句上,意味着要对某行语句有特殊的观察目的或是明确此语句原创 2021-01-06 09:39:22 · 6014 阅读 · 0 评论 -
【C语言网络编程】SOKET多客户端通信
先前讲过网络编程基础的文章出现过了一个服务端与一个客户端连接通信的实例,详情参考:网络编程基础这篇文章将描述如何实现多个客户端通信。先前服务端只能够接收一个客户端的连接,那么多客户端会让服务端出现什么样的变化呢?多客户端通信服务器要接受多个客户端的连接(如果循环接受连接,那么将不能过度到通信过程了,这该怎么办?——多线程)多线程解决多客户端通信过程有客户端连接到服务器,启动一个线程来和这个客户端通信线程里接受客户端发来的数据把数据广播给当前连接到服务器的所有客户端...原创 2020-12-15 20:47:44 · 1710 阅读 · 0 评论 -
【C语言网络编程】:SOKET编程实现服务端计算返回客户端
学习目标学习win32 Soket编程,掌握学习与使用陌生函数的方法掌握结构体与枚举的使用进一步熟练数组的使用实现效果客户端首先得到服务端时间。输入数字和计算方式(加减乘除),得到计算结果。服务端首先发送服务端的时间,而后进行计算服务。实现思路...原创 2020-12-13 19:38:18 · 636 阅读 · 1 评论 -
c语言:表达式求值实现
学习目标掌握栈的定义及实现掌握利用栈求解算术表达式的方法实验内容利用栈来实现算术表达式求值的算法,算法中调用几个函数要给出其实现过程:函数IN(c)判断c是否为运算符函数Precede(t1,t2)判断运算符t1 t2优先级函数Operate(a, theta, b)对a和b进行二元运算:theta程序运行时,输入合法的算术表达式,便可输出相应的计算结果。表达式求值输入表达式,将操作符分为三类确定相邻操作运算符的优先次序。其中3+4+5 运算符θ1和θ2都为加号,则θ1=θ2原创 2020-12-11 14:46:41 · 2588 阅读 · 0 评论 -
【C语言网络编程】网络编程基础,服务端与客户端通信实例
什么叫网络编程?多个程序之间能够交换数据同一个主机上局域网内互联网都可以交换数据!TCP/IP协议及时,安全,全双工通信协议:TCP协议 IP协议TCP协议:通信的方式IP协议:地址,用来区分主机windows操作系统上用TCP协议:CS架构(BS架构没有对应的客户端)服务器 server客户端1.请求协议版本1.请求协议版本2.创建socket2.创建socket3.创建协议地址族(IP地址、网络端口、通信协议)3.获取服务器协议地址族4.原创 2020-12-10 15:36:51 · 544 阅读 · 2 评论 -
以史为鉴C实践:一维元胞自动机系统
背景元胞自动机元胞自动机在很多方面有应用,这是非常有趣的地方,世界上很多的看似没有规律的东西,都可以用这个模型去模拟它潜在的规律。本文做的是一维双色元胞自动机,可以简单地阐述为,给个一维数组,按照某种演化规则,可以得到这个一维数组进行一次演化、二次演化后得到的一维数组,代码要实现的就是实现初始一维数组的演化,得到演化后的数组。具体的话可以看以下的文章,作者写的很好,一下子能看懂:元胞自动机基础知识另外,学院派一些,更为具体的理论知识可以看:元胞自动机理论还有元胞自动机应用实现的小游戏:生命原创 2020-11-26 22:02:02 · 719 阅读 · 0 评论 -
以史为鉴C实践之六:堆栈和递归函数
C语言变量存储和堆栈的简述在C/C++语言体系内,计算机的内存被分为以下几种存储空间:栈区(Stack):由编译器自动分配释放,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。堆(heap):由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。与数据结构中的堆是两回事,分配方式类似于链表。静态区(static):全局变量和局部静态变量的存储是放在一块的。程序结束后由系统释放。文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。程序代码区:存放函数体的二级制代码原创 2020-11-25 10:37:07 · 239 阅读 · 1 评论 -
以史为鉴C实践之四:区域填充函数(递归调用)
实现函数int fillregion(char *buf, int x, int y)/*描述: 依次检查坐标(x,y)周围的邻居点,最多8个邻居点,注意边界 如果该邻居为0,则将该邻居的值修改为1, 并使用该邻居坐标,递归调用fillregion 返回值:返回0 */实现效果由于源文件是这样的文件:在加上第二篇文章前面改为pbm的效果,会呈现出test.pbm的图片实际上按照猜想,我认为,由于数据1代表的是黑方块,而数据0代表的是白方块,那么这个函数的作用将会是:指定一个坐标,原创 2020-11-24 10:22:38 · 679 阅读 · 0 评论 -
以史为鉴C实践之三:文件冗余数据删除、移位
实现函数当文件数据当中出现0、1外数据时,将其删除,并将数据移位。实现过程:将文件的内容复制到数组buf中,处理buf,处理好后的buf将存入新的文件当中。int trim(char *buf, int bytes);//buf是从读取文件后得到的数据,具体见第二篇文章,bytes是处理数据的长度。伪代码:int trim(数组, 比特数据){ for(int i = 0; i<数组长度 ;i++) { if(buf[i]是无效数据) { 删除buf[i]; buf[原创 2020-11-22 11:00:41 · 155 阅读 · 0 评论 -
以史为鉴C实践之二:读写文件
程序分析需求分析实现以下函数:Main函数读取指定文件内容"test1.txt"在新文件中"text1.pbm" ,先将“P1\n50 50\n”写入,再写入读取到的"test1.txt"的信息。int readfile(char *filename, char *buf);描述:读取指定文件的全部内容到buf当中返回值:成功返回读取的字节数,失败返回-1int writefile(char *filename, char *buf, int bytes)描述:往指定的文件filen原创 2020-11-20 19:14:59 · 149 阅读 · 0 评论 -
以史为鉴C实践:头文件写法、函数对另外一个源文件函数的调用(外部函数调用)
当一个程序由多个源文件组成的时候,根据函数是否能被其他源文件调用的时候,将函数分为内部函数和外部函数。一个项目当中,调用别的源文件中的函数,可以通过extern的方法来实现调用外部函数。定义一个函数在源.cpp中在Tmain.cpp中调用此函数运行结果同一个项目当中还可以定义头文件来调用当函数不在一个项目当中如何调用?通过环境变量include path.lib里设置用双引号括起的方法写包含头文件名字#include "…\DataBase\include\db.h"原创 2020-11-19 14:39:02 · 1252 阅读 · 0 评论 -
以史为鉴之C实践:一维数组的操作(初始化、计算长度、拷贝、删除、插入、排序)
在写的时候遇到的最大的问题还是在拷贝数组上,由于数组的静态空间导致越界、拷贝长度调整等问题,使得程序没能呈现意料中的效果。以史为鉴可以知兴衰,总结一下遇到的主要问题:copyarray(int *src, int *dest); //将dest拷贝到src开始的时候,拷贝函数还是比较简略的,是直接改变了src数组的指向,没有考虑过静态空间的问题,只要数组dest的长度大于src的长度,就会出现越界。int copyarray(int *src, int *dest){int n = lengt原创 2020-11-19 12:25:45 · 671 阅读 · 0 评论 -
识别C++指针类型的正确姿势
昨天在看谭浩强的C++的时候,觉得指针这块虽然分块阐述:关于指针定义、指针变量、数组与指针、字符串与指针、函数与指针等有所阐述,但在分类以及如何辨别方面没有一个清晰的方法和思路。为了对这一块内容有更深的理解,整理一下关于指针辨认的方法。一般情况下,指针结合性是从右到左的。从这点来看,我们首先提取出要辨认的p,从p开始,向外扩展,先看右边最近项。例如float (*(*p)(int,int,float))(int)从p开始,右边为括号,结合左边形成*p,是一个指针。那么指针的指向呢?再看右边,一个参数原创 2020-11-15 16:32:26 · 856 阅读 · 0 评论