自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 资源 (1)
  • 收藏
  • 关注

原创 UDP打洞

UDP打洞要借助一个打洞服务器。server端#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <sys/types.h>#include <string.h>#include <errno.h>#ifdef _WIN32#inc...

2019-12-12 23:00:02 647

原创 TLV格式解析与打包

#include <stdio.h>#include <WinSock2.h>#include #pragma comment(lib, “WS2_32”)enum emTLVNodeType{emTlvNNone = 0,emTlvNRoot,emTlvName,emTlvAge,emTlvColor};typedef struct _CAT_IN...

2019-12-12 22:50:45 889

原创 进制转换工具库

#include <iostream>#include <string>using namespace std;/***************************************************************************** 函数功能:字符串转换为数字 将任意2-36进制表示的字符串转化为十进制数。* ...

2019-12-12 22:43:26 227

原创 位操作封装

#ifdef _WIN32#include <windows.h>#else#define byte unsigned char#endif/***************************************************************************** 函数功能:获取指定位的值* @param n 值* m ...

2019-12-12 22:42:12 199

原创 C++禁止拷贝虚基类

#pragma onceclass NonCopyable{public:NonCopyable(const NonCopyable&) = delete; // deletedNonCopyable& operator = (const NonCopyable&) = delete; // deletedNonCopyable() = default; /...

2019-12-11 15:00:56 206

原创 c++获取系统时间戳的方法

static inline uint64_t getCurrentMicrosecondOrigin() {#if !defined(_WIN32) struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000LL + tv.tv_usec;#else return std::chrono::du...

2019-12-11 14:53:20 4861

原创 RAII封装

在c++中可以借助RAII来完成对对象地处理,避免到处异常释放对应地资源。#ifndef __ONCE_RAII_H__#define __ONCE_RAII_H__#include <functional>using namespace std;namespace toolkit { class onceRAII { public: typedef functio...

2019-11-15 16:05:42 193

原创 c++借助stringstream实现类型转换

无意中发现的一个小模板,可以方便地进行类型转换,从而避免调用多个函数地麻烦。#include <iostream>#include <sstream>#include <string>using namespace std;template<class out_type, class in_value>out_type convert_...

2019-11-15 11:21:07 125

转载 BOOL类型、int型、float型及指针变量与“零值”比较

bool值bool flag;if(flag)if(!flag)2.int,shortint a;if(0 == a)if(0 != a)3.floatfloat x;const float EPSINON = 0.00001;if((x >= -EPSINON) &&(x <= EPSINON))4.char*char* p;if...

2019-10-25 10:22:01 249

原创 无法解析的外部符号_imp_fprintf和_imp__iob_func

遇到_imp_fprintf和_imp__iob_func无法解析的问题,根本原因是程序中使用到的库和现在程序编译的环境不一样。举个例子,比如你的程序用到了libcurl.dll这个动态库,但是这个动态库实在VS 2013的工具集下编译的,而你的程序现在在VS2017的工具集下编译,那么就有可能引发这个问题。工具集查看如图:既然我们已经知道了问题的原因,那么接下来说说常见的三种解决方案:1....

2019-10-21 14:19:54 2545

原创 c++简单对象池(或连接池)的实现

在服务器的开发中,对象池或者连接池的使用有两种特别的使用场景:一是对象的产生和销毁会消耗很大,二是对象的数量受到限制,比如mysql的连接对象。这个时候就可以采用池化的技术来解决该问题。池化的意思就是将对象一开始创建好放进池中,当需要时,从里面去,不需要时,在放回池中。#ifndef __OBJECT_POOL_H__#define __OBJECT_POOL_H__#include &lt...

2019-08-19 18:42:35 328

原创 使用shared_ptr代替new来管理缓存区

在开发的过程中,经常需要使用到缓存区。当缓存区过大(一般栈的大小默认为1M,当申请的缓存区大小超过1M,就不能使用栈来开辟对象。或者需要调整栈的带线啊哦),又或者我们一开始不知道需要开辟多大的空间,只有当程序运行的时候,才能获知需要开辟的内存空间的大小(在栈中申请内存,必须在编译期就知道需要开辟的空间的大小)。这时,就必须使用new/malloc等从堆中申请内存空间。而堆内存的申请和释放必须是成对...

2019-08-19 18:22:54 712

原创 大小端

int main() { int num = 0x12345678; uint8_t * p = (uint8_t*)&amp;num; for (int i=0;i&lt;4;++i) { //小端模式,低地址存放低位,p+0 为78,p+1为56,p+2为34,p+3为12 printf("0x%02x\n", *(uint8_t *)(p + i)); } re...

2019-07-01 18:03:26 109

原创 时间戳

一 什么是时间戳时间戳是自 1970 年 1 月 1 日(08:00:00 GMT)至当前时间的总秒数。它也被称为 Unix 时间戳(Unix Timestamp)。定义为:从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。二 怎么获取时间戳既然知道了什么时间戳,大家肯定猜到了时间戳是怎么来的,对的,就是调用了time()获取到的。三 怎么解析时间戳解析时间戳,...

2019-07-01 17:52:40 1082

原创 事务

事务的四个特征:ACID,即原子性,一致性,隔离性,持久性。原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前或者保存点的状态。一致性:这个讲的是事务是按照预期生效的。比如张三向李四转100元,当张三转移出去100时,李四必须收到100元,但是由于其他原因李四只收了了80元,这就不符合一致性了。...

2019-06-24 22:05:56 101

原创 触发器

首先,数据库约束包括:实体完整性约束,即对主键的约束(主键不能位空)参照完整性约束,即对外键的约束用户自定义的约束,比如对某列值得大小范围进行限制而,这些简单得约束并不能满足复杂得约束条件。比如有这么几张表,一张是职工表,一张是职工证书情况表。当职工离职得时候,需要从职工表和职工证书情况表中同时删除该职工得信息,防止脏数据得产生。但是上面得约束是完全没法满足这样得条件得,这个时候,就需...

2019-06-24 21:22:05 132

原创 c++结构体初始化未生效

在c语言中,我们通常都是用memset来初始化一个结构体。但是在c++中,使用memset来初始化一个结构体,却经常得不到正常的结果。这是为什么呢?问题其实是出在了,结构体成员变量类型上了,因为使用了非ADT类型(大致就是c++一些特有的类型,如string,vector等等)。memset初始化的时候,是将一块固定大小的内存置空,而string,vector等的大小并不是固定的,而是会动态变化...

2019-05-28 09:47:19 1345

原创 c++实现跨平台字符转码

#include <string>#include <vector>#include <locale>#include <codecvt>using namespace std;std::string gb2312_to_utf8(std::string const &strGb2312){ std::vector<wch...

2019-05-28 09:26:38 802

原创 使数据库输出结果按照拼音排序进行输出和输出指定范围的结果

https://blog.csdn.net/qq_27727251/article/details/82733067

2019-05-28 09:22:17 146

原创 rtsp认证方法

https://blog.csdn.net/t1269747417/article/details/86038128核心内容:/***********************************************************************************************函数名 : MakeMd5DigestResp函数功能 :...

2019-05-28 09:10:38 1086 1

原创 c++跨平台生成uuid

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写。是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID)。UUID的唯一缺陷在于生成的结果串会比...

2019-03-22 20:18:13 3509

原创 c++简单日期实现

#include <iostream>#include <ctime>#include <chrono>#include <string>using namespace std;class CDate{public: CDate() {} ~CDate() {} CDate(const CDate&) = del...

2019-03-19 00:00:22 170

原创 查看系统的MTU

windows:netsh interface ipv4 show subinterfaceslinux:ip link shownetstat -iifconfig -a

2019-03-12 21:41:24 991

原创 ping 命令常用选项

ping常用选项一般: ping ip(或者主机名)ping -n 发包数目 ipping -t ip 一直pingping -l 字节大小 ip 一包多大字节

2019-03-09 15:57:45 2059

原创 vim修改权限: E45: 已设定选项 'readonly' (请加 ! 强制执行)

输入 w !sudo tee % 后,在输入q退出,在打开文件时,文件已经被修改

2019-03-09 15:40:55 10602 1

原创 寻找可用端口资源

#include &lt;iostream&gt;#include &lt;mutex&gt;#include &lt;atomic&gt;using namespace std;#ifdef WIN32#include &lt;winsock2.h&gt;#include &lt;WS2tcpip.h&gt;#pragma comment(lib,"ws2_32.lib")#e...

2019-03-09 12:09:38 629

原创 网络编程中的bind函数和c++标准库中的bind函数冲突

解决方法如下,建议在实际开发中尽量不要使用using namespace std;而是尽量的缩小域的范围,比如使用:std::cout,std::cin等。解决该问题的方法,可以使用全局域进行解决,比如想使用c中的库函数,就可以直接使用::bind进行掉调用。对于C库中的函数和c++库中的函数重名问题,都可以使用该方法进行解决。推荐一篇博文,将的是C/C++中的标准库有什么的问题https:/...

2019-02-25 22:37:02 566

原创 wireshark中捕捉过滤器(capture filter)和显示过滤器(Display filter)的区别

在wireshark中,capture filter可以在抓包过程中将不符合过滤条件的包进行舍弃,只留复合过滤条件的包。而Display filter是在已抓到的包中,将对应的包进行过滤,只显示满足条件的包。capture filter的过滤条件设置位置Display filter的过滤条件设置位置语法可以参考以下的两篇博文https://blog.csdn.net/u013258415...

2019-02-25 22:02:40 10645

原创 SQL 查找某个字段重复

select 字段名, Count() From 表名 Group By 字段名 Having Count() &gt;1COUNT(*) 函数返回在给定的选择中被选的行数。参考如下:http://www.cnblogs.com/fanguangdexiaoyuer/p/6268211.html...

2019-02-21 23:41:09 1712

原创 不要再构造函数中使用this指针

简单一句话:构造函数干三件事:给创建的对象建立一个标识符;为对象数据成员开辟内存空间;完成对象数据成员的初始化。只有当构造函数完成后,这个对象才是真正有效的,即this才是正确的。而再构造中使用this时,这个对象并没有完全的初始化好,所以存在问题。https://blog.csdn.net/zenghui08/article/details/11853685...

2019-02-12 22:13:25 1812

原创 sql 查询字段是否为空及统计满足条件语句的总个数

sql 查询某字段为空select * from 表名 where 字段名 is nullsql 查询某字段不为空select * from 表名 where 字段名 is not null使用and或者or组成同时满足多个条件的语句sql查询字段1为空且字段2不为空的数据select * from 表名 where 字段名1 is null and 字段名2 is not null...

2019-02-12 21:45:46 7153

原创 libevent的简单使用

libevent的使用方法1.首先调用event_init()函数或者event_base_new()创建一个event_base对象。一个event_base相当于一个reactor实例。2.创建具体的事件处理器。并设置他们所从属的reactor实例.evsignal_new(),和evtimer_new()等分别用于创建信号和定时器事件或其他事件。统一入口时event_new()3.调用...

2019-02-08 21:51:32 421

原创 竞态条件

https://blog.csdn.net/a19881029/article/details/8113662?utm_source=blogxgwz2

2019-02-07 17:20:13 250

原创 UML类图知识

UML(Unified Modeling Language),意思是统一建模语言,是为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。每一个图形都是用来描述一个问题,根据对应的问题,选择对象的图形,再去看对应的图形的一些基本表示方法,这个就可以把自己的软件思路,生动形象的描述出来。一共有13种图。大致结构如下:1. 用例图语义描述用户系统的使用场景元素...

2019-02-07 14:02:50 382

原创 c++正则表达式

1. 转义字符在讲c++正则的时候,首先要讲一下,这个转义字符,在c++中匹配正则的时候,正则是需要对其中的’'进行转义的。cout &lt;&lt; regex_match("123", regex("\d+")) &lt;&lt; endl; //结果为0,需要转义字符'\'cout &lt;&lt; regex_match("123", regex("\\d+"))

2019-02-05 10:36:56 409

原创 openssl中的base64

base64是一种基于64个可打印字符来表示二进制数据的方法。核心的方法是38 = 64;该怎么理解这个3 * 8 = 6 *4 呢?一个字节占8位,以3个字节为一组,将其24位拆成4个字节,每个字节填充6位,之后在6位的前面补两个0,形成4个字节形式。当然如果原文不够3个字节怎么办呢?加入还剩一个数,则将该数继续原来的操作,会转换成2个字节,然后不够四个字节,就在剩余的两个字节用’='进行补全。...

2019-02-02 16:02:53 2254 1

原创 openssl中的md5认证

md5 英文名为:Message Digest Algorithm,即信息摘要算法。这是一种散列算法,散列函数是一种公开的数学函数。散列函数运算中的输入信息叫做报文,运算后的所得的结果叫做散列码或者消息摘要。md5是一种非常著名的散列算法,已经成为国际标准。md5散列算法对输入的任意长度消息产生128位(16字节)长度的散列值(或称消息摘要)。注意,这个散列值是一个十六进制的值,而经常见到的是将...

2019-02-02 14:01:19 771

原创 判断一串字符串中是否有汉字

汉字占两个字节,每个字节的ASCII码最高位均为1,由于char默认为带符号类型,所以汉字的ASCII码小于0,而英文数字等其他字符占一个字节,ASCII码最高位为0,值在0~127之间。所以只要有一个字节的小于0,就代表存在汉字。#include&lt;iostream&gt;#include &lt;string&gt;using namespace std;int main(){...

2019-01-26 23:17:52 1738

原创 c++使用格式化输出和输入来完成进制转换

在c++中有三个flag来表示输出输入流的整数进制,分别为:oct 八进制dec 十进制 ,默认hex 十六进制上面没有提供二进制,但是转换时,可以借助biteset进行转换成二进制。需要特别注意的一点时,进制一旦被修改,除非再次被修改回来,否则修改将会一直作用。#include &lt;iostream&gt;#include &lt;bitset&gt;using name...

2019-01-26 22:45:44 326

原创 c++反转算法reverse和reverse_copy

在c++中提供了reverse和reverse_copy来完成反转。void reverse(beg,end);beg 起始位置,end终止位置Iterator reverse_cpoy(beg,end,destBeg);beg 起始位置,end终止位置,destBeg 需要copy到的起始位置.返回第一个未被覆盖的元素位置二者的区别,reverse会改变本身的顺序,而reverse_co...

2019-01-26 22:23:50 555

认证算法.rar

md5和basic认证的工具类文件,https://mp.csdn.net/mdeditor/87116710#使用。

2019-05-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除