char函数

模板

◇◆丶佛笑我妖孽 提交于 2020-01-04 23:57:21
在我们编写代码时,我们会遇见这种情况: 比如交换函数,当我们要交换的类型是int(传的参数为int型)时,我们要编写的swap函数的形参就应该是int,但当我们要交换的是double型时,我们还要再写一个swap函数来满足要求。每换一种类型就要再重载一个swap函数来满足条件。 虽然通过这方法重载实现所有类型的交换函数,但是这种方法有几个不好的地方,一是重载函数仅仅类型不同,导致代码的复用率很低,只要有新类型出现,就要增加对应的函数;再者代码的可维护性比较低,一个出错可能所有的重载都出错,要一个一个改。 通过上面的例子,我们想能不能告诉编译器一个模子,编译器可以通过不同的类型利用这样的模子自动生成适合各种类型的函数。答案是当然可以 即泛型编程:编写与类型无关的通用代码,而模板是泛型编程的基础。 下面我们来郑重的引入 模板 模板分为函数模板和类模板 函数模板: 什么是函数模板? 函数模板是一个与类型无关,并且对所有类型都适用的函数,在使用时函数可被参数化,根据实参类型结合模板产生函数的特定类型版本实现函数功能。 如何使用? template <typename T1,typename T2...> 返回值 函数名(参数列表){ } typename是用来定义模板参数关键字的,也可以用class 例如: template<typename T> void Swap(T &x, T &y

Linux下使用libpcap进行网络抓包并保存到文件(函数介绍)

自闭症网瘾萝莉.ら 提交于 2020-01-04 23:38:00
libpcap是一个抓取网络数据报文的C语言函数库,使用这个库可以非常方便的抓取网络上的报文,方便我们分析经过我们设备上的各种报文; 使用libcap库编译时都要在后面加上-lpcap选项 使用pcap探测获取网络接口 char * pcap_lookupdev(char * errbuf) 这个函数就是用来探测网络接口的,它会返回 第一个 合适的网络接口字符串指针,如果出错则在errbuf中返回,长度至少是PCAP_ERRBUF_SIZE。 #include <pcap.h> #include <stdio.h> #include <stdlib.h> int main() { char errBuf[PCAP_ERRBUF_SIZE], * devStr; devStr = pcap_lookupdev(errBuf); if (devStr) printf("success: device: %s\n", devStr); else { printf("error: %s\n", errBuf); exit(1); } return 0; } 注意这个函数是返回 第一个 合适的网络接口字符串,我的主机第一个合适的网络接口为 vibir0端口,在这个虚拟端口下没有办法抓到包,因而要找到指定的端口要要循环遍历端口后,进行选择特定网卡端口 char * get(){ pcap_if

C++中的显示类型转换

ε祈祈猫儿з 提交于 2020-01-04 05:40:24
C++中显示转换也成为强制类型转换(cast),有四种:static_cast、dynamic_cast、const_cast、reinterpret_cast。命名的强制类型转换符号一般形式如下: cast_name<type>(expression); 以下分别介绍 一、static_cast 任何具有明确定义的类型转换,只要不包含底层const都可以使用static_cast。好吧这句话我不是很懂,换句话:编译器隐式执行的任何类型转换都可以由static_cast显示完成。也就是说,两类型之间可以发生隐式的转换,就可以用static_cast显示转换,有点意思。但要知道的是C++基本类型的指针之间不含有隐式转换(void*除外、const的有些也是可以的),需要 显示转换 。什么意思?如下: double d=3.14; int i=d; //编译器的隐式转换,等价于下面这条语句 int i=static_cast<int>(d); /*指针之间的转换*/ char str[]="good"; char *ptr=str; int *p=static_cast<int *>(ptr); //编译错误,两者之间的转换要显式,如下 int *p=(int *)(ptr); 仅当类型之间可隐式转换时(除类层次见的下行转换以外),static_cast的转换才是合法的,否则将出错。

地址、指针与引用

岁酱吖の 提交于 2020-01-04 05:39:17
  计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。   变量是在内存中用来存储数据以供程序使用,变量主要有两个部分构成:变量名、变量类型,其中变量名对应了一块具体的内存地址,而变量类型则表明该如何翻译内存中存储的二级制数。我们知道不同的类型翻译为二进制的值不同,比如整型是直接通过数学转化、浮点数是采用IEEE的方法、字符则根据ASCII码转化,同样变量类型决定了变量所占的内存大小,以及如何在二进制和变量所表达的真正意义之间转化。而指针变量也是一个变量,在内存中也占空间,不过比较特殊的是它存储的是其他变量的地址。在32位的机器中,每个进程能访问4GB的内存地址空间,所以程序中的地址采用32位二进制数表示,也就是一个整型变量的长度,地址值一般没有负数所以准确的说指针变量的类型应该是unsigned int 即每个指针变量占4个字节。还记得在定义结构体中可以使用该结构体的指针作为成员,但是不能使用该结构的实例作为成员吗?这是因为编译器需要根据各个成员变量的大小分配相关的内存,用该结构体的实例作为成员时,该结构体根本没有定义完整,编译器是不会知道该如何分配内存的,而任何类型的指针都只占4个字节,编译器自然知道如何分配内存。我们在书写指针变量时给定的类型是它所指向的变量的类型

C语言指针类型 强制转换

99封情书 提交于 2020-01-04 05:38:08
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的一种记住这个地址的方便一点的方法。但是,不同的变量在机器中都是0-1代码,所以,我们不能简单的通过检查一个值的位来判断它的类型。 例如,定义如下: int a; float b; double c; long double d; (假设它们所占的字节分别是 4、 8、 8、 10,而且连续存储于某个地址空间,起始地址是 100,则我们可以得到如下内存分布 ) a变量就是由以地址100开始到103结束的4个字节内存空间内的0-1代码组成。b变量则是由以地址104开始到112结束的8个字节内存空间内的0-1代码组成。而在机器中,这些内存都是连续的0-1代码,机器并不知道100~103是整型而104~111是float型,所有这些类型都是编译器告知的。当我们用a时,由于前面把a定义为int型,则编译器知道从a的地址开始向后取4个字节再把它解释成int型。那么(float)a,就是先按照int类型取出该数值,再将该数值按照int to float的规则转换成float型。所以强制类型转换就是按照某个变量的类型取出该变量的值,再按照***to**

PX4 FMU启动流程 2. 二、 nsh_initscript

血红的双手。 提交于 2020-01-04 05:33:57
PX4 FMU启动流程 2. 二、 nsh_initscript PX4 FMU启动流程 2. 二、 nsh_initscript -------- 转载请注明出处 -------- 2014-11-27.冷月追风 -------- email: merafour@163.com /**************************************************************************** * Name: nsh_initscript * * Description: * Attempt to execute the configured initialization script. This script * should be executed once when NSH starts. nsh_initscript is idempotent * and may, however, be called multiple times (the script will be executed * once. * ****************************************************************************/ int nsh_initscript(FAR struct nsh

SQL数据库

ⅰ亾dé卋堺 提交于 2020-01-03 21:18:31
基本程序 1. 题 先在D盘创建教学管理文件夹,Test文件夹 /*创建数据库“教学管理”。 (1) 有1个数据文件,数据文件逻辑文件名为“教学管理_Data”, 物理文件名为“教学管理_Data.mdf”,初始大小为5MB,最大大小不受限制,自动增长每次增加1MB。 (2) 事务日志文件只有一个,逻辑名为“教学管理_log”,物理文件名为“教学管理_log.ldf”, 初始大小1MB,最大大小为10MB,自动增长每次增加10%。 (3) 所有文件均保存在“D:\教学管理”文件夹中。 */ CREATE DATABASE 教学管理 ON ( NAME = 教学管理_Data, FILENAME = ‘D:\教学管理\教学管理_Data.mdf’, SIZE = 5MB, FILEGROWTH = 10MB) LOG ON ( NAME = 教学管理_log, FILENAME = ‘D:\教学管理\教学管理_log.ldf’, SIZE = 1MB, MAXSIZE = 10MB, FILEGROWTH = 10%) /*创建数据库“Test” (1) 要求该数据库有两个数据文件组,分别是primary和second。 (2) 共有3个数据文件,其中主数据文件逻辑文件名为“test”, 物理文件名为“test.mdf”,初始大小为10MB,最大大小为50MB,

C#屏蔽字过滤实现

元气小坏坏 提交于 2020-01-03 13:04:13
屏蔽字过滤应该是每个游戏都必不可少的功能,然而屏蔽字库动则上10万,要实现个效率较高的过滤还是不容易的。 现在假设有一个屏蔽词为“龙在天”,那么,当出现“我是龙####在,,,,天哟”的时候,正确的过滤结果应该是得出“我是*”。接下来就讨论一下这个实现的原理。 首先,将龙在天的头尾两个字取出来,及“龙”和“天”,当“我是龙####在,,,,天哟”出现时,只要检测是否包含头尾,然后取出这一段字符串来(“龙####在,,,,天”),再去除中间的干扰字符跟原屏蔽字(“龙在天”)匹配即可,这里不做复杂的处理,只是简单将常用符号做一个表,直接用,也可以满足大部分需求了(可以考虑给字符分类,做优先级,低优先级的判定为干扰字符)。 先贴下完整代码,后面再简单讲下代码的原理咯 public sealed class SubSensitiveWord { public char Last; public string Source; } public sealed class SensitiveWord { public char First; public Dictionary<char, SubSensitiveWord> LastWords = new Dictionary<char, SubSensitiveWord>(); } public static class

替换空格(C++和Python 实现)

别等时光非礼了梦想. 提交于 2020-01-03 03:52:25
(说明:本博客中的 题目 、 题目详细说明 及 参考代码 均摘自 “何海涛《 剑指Offer:名企面试官精讲典型编程题 》2012年”) 题目 请实现一个函数,把字符串中的每个空格替换为 "%20" 。例如输入 "We are happy.", 则输出 "We%20are%20happy." 。 进一步详细说明: 在网络编程中,如果 URL 参数中含有特殊字符,如空格、'#'、':' 等,可能导致服务器端无法获得正确的参数值。我们需要这些特殊符号转换成服务器可以识别的字符。转换规则是在 '%' 后面跟上 ASCII 码的两位十六进制的表示。如空格的 ASCII 码是 32,即十六进制的 0x20,因此空格被替换成 "%20" 。再比如 '#' 的 ASCII 码为 35,即十六进制的 0x23,它在 URL 中被替换为 "%32"。再比如 ':' 的 ASCII 码为 50,即十六进制的 0x32,它在 URL 中被替换为 "%32"。 算法设计思想 1. 时间复杂度为 O(n 2 ) 的算法思想 从头到尾,扫描字符串中的每个字符,遇到空格,先将剩余的字符(未遍历到的字符串)整体向后移动2个位置,然后,在空格和其后的2个字符的替换为"%20"。 2. 时间复杂度为 O(n) 的算法思想 先遍历整个字符串,计算字符串中空格的总数,从而可以计算出替换后的字符串长度(根据替换规则

iOS base64 加密解密 通用类

二次信任 提交于 2020-01-01 20:03:28
本文转载自: https://www.cnblogs.com/ygm900/archive/2013/05/15/3079278.html 作者:ygm900 转载请注明该声明。 在使用过程中,直接将被类引入到项目中即可,不需要其它辅助类。 使用示例: 将此通用类的头文件引入到目标类后,直接使用类名进行调用即可。 NSString *str = [NSString stringWithFormat: @" YWE= " ]; NSString *str1 = [NSString stringWithFormat: @" aa " ]; NSLog( @" resultStr========%@ " ,[CommonFunc textFromBase64String:str]); //使用类名进行调用 NSLog( @" resultStr=========%@ " ,[CommonFunc base64StringFromText:str1]); //使用类名进行调用 源码下载: 在项目中遇到字符串的base64编解码,分享一下工具类: CommonFunc.h // // CommonFunc.h // PRJ_base64 // // Created by wangzhipeng on 12-11-29. // Copyright (c) 2012年 com.comsoft.