C++
阿尔兹
将生活技能点满,活成百科全书
展开
-
Base16,Base32,Base64编码的介绍
简介在网络传入字符串过程中,如果编码方式是基于ASCII,那么会造成什么问题?比如:url地址中存在"/"(如:www.csdn.net/nav/ai),字符串中编码中也存在"/",这样就会出现错误地址解析.为了防止这种情况的出现,出现了Base16,Base32,Base64编码方式.我们知道计算机传输的单位是字节,也就是8个比特位,按照一个字节编码的方式结果就有256种状态(每个比特位0或者1两种状态,8位就是=256),ASCII编码是将8个比特位中最高位置为0,所以总共可表示128个字符(即=1转载 2020-12-28 15:59:48 · 2852 阅读 · 0 评论 -
C++ 之_stdcall、_cdcel和_fastcall三者的区别
__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。调用协议常用场合__stdcall:Windows API默认的函数调用协议。 __cdecl:C/C++默认的函数调用协议。 __fastcall:适用于对性能要求较高的场合。函数参数入栈方式__stdcall:函数参数由右向左入栈。 __cdecl:函数参数由右向左入栈。 __fastcall:从左开始不大于4字节的转载 2020-12-13 16:44:33 · 293 阅读 · 0 评论 -
Windows消息拦截技术的应用(Hook钩子)
一、前 言众所周知,Windows程式的运行是依靠发生的事件来驱动。换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做适当的处理。处理完此次消息后又回到等待状态。从上面对Windows程式运行机制的分析不难发现,消息在用户与程式之间进行交流时起了一种中间“语言”的作用。在程式中接收和处理消息的主角是窗口,它通过消息泵接收消息,再通过一个窗口过程对消息进行相应的处理。消息拦截的实现是在窗口过程处理消息之前拦截到消息并做相关处理后再传送给原窗口过程。通常情况下,程序员可以在窗口过程转载 2020-08-25 11:35:56 · 8394 阅读 · 1 评论 -
C++各容器特性总结
setset放第一个是因为很多人经常忽略set的特性而造成BUGset是一种关联式容器,其特性如下:set以RBTree作为底层容器 所得元素的只有key没有value,value就是key 不允许出现键值重复 所有的元素都会被自动排序,元素默认按升序排列。 不能通过迭代器来改变set的值,因为set的值就是键mapmap和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的。它的特性如下:map以RBTree作为底层容器 所原创 2020-08-21 17:23:31 · 626 阅读 · 0 评论 -
C++ 符号修饰和函数签名
前言:(这部分讲的是历史、由来,不想了解的可跳过)约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的。比如一个汇编源代码里面包含了一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是foo。当后来UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个C程序要使用这些库的话,C语言中不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突。比转载 2020-08-21 17:01:25 · 1064 阅读 · 0 评论 -
c++模板的特化(函数模板特化,类模板特化)
关于模板的特化函数的特化使用模板时会遇到一些特殊的类型需要特殊处理,不能直接使用当前的模板函数,所以此时我们就需要对该类型特化出一个模板函数(就是写出一个模板函数专门给该类型使用)当使用一个判断相等的模板函数时template<class T>bool Isequal(T& p1, T& p2){ return p1 == p2;}但是该模板函数在对于字符串进行比较时就不能使用了,对于字符串我们不能直接比较,因此直接特化出一个专门供字符串使用的模板转载 2020-08-21 16:44:28 · 1634 阅读 · 0 评论 -
C++ Windows——计算耗时(获取高精度毫秒计时)
一、代码(1)返回高精度毫秒计时long MyGetTickCount(){ static BOOL init = FALSE; static BOOL hires = FALSE; static _int64 freq = 1; if(!init) { hires = QueryPerformanceFrequency((LARGE_INTEGER*)&freq); if(!hires) f原创 2020-08-04 10:42:36 · 2459 阅读 · 0 评论 -
C++类设计者的核查表——设计一个类需要注意哪些?
以下问题都没有确切的答案,关键在于在设计类的时候要时刻提醒自己思考它们,不要等出了错再回头。1.你的类是否有构造函数?如果没有请关闭此文章;有些类很简单,它们的结构就是它们的接口,我们要关心足够复杂的类,它们需要构造函数来隐藏它们内部的工作方式;2.你的类数据成员是私有的吗?通常使用共有的数据成员不是什么好事,因为类设计中无法控制何时访问这些成员;templete<class T>class Vector{public: int leng原创 2020-07-27 14:26:42 · 298 阅读 · 0 评论 -
内存拷贝CopyMemory与MoveMemory
CopyMemory是一个Windows API函数,它能将一块内存数据从一个位置复制到另一个位置;函数原型:void CopyMemory(PVOID Destination, //要复制内存块的目的地址。const VOID *Source, //要复制内存块的源地址。SIZE_T Length //指定要复制内存块的大小,单位为字节);...原创 2020-01-02 13:58:33 · 5671 阅读 · 0 评论 -
获取程序当前的运行目录 GetModuleFileName
C++中用于获取程序当前的运行目录的函数:GetModuleFileName函数原型:WINAPI DWORD GetModuleFileName( HMODULE hModule, LPWSTR lpFilename, DWORD nSize);hModule:要获取文件名的模块实例句柄,null表示当前模块(返回用于创建调用GetModuleFileName的文件...原创 2019-12-28 11:41:10 · 862 阅读 · 0 评论 -
CString字符串查找和截取与去空格(Find,FindOneOf,ReverseFind,Left,Mid,Right,substr,TrimLeft和TrimRight)
一、CString之Find()、FindOneOf()、ReverseFind()。此三个函数返回值均为整数int。1、Find()该函数从最左侧0位置开始索引,查找到第一个出现该字符的位置,返回position。示例如下:CString s("abcabc");ASSERT( s.Find('b') == 1 );intf=s.Find("de")...原创 2019-12-26 21:29:47 · 4899 阅读 · 0 评论 -
ShellExecute函数介绍
功能:ShellExecute的功能是运行一个外部程序头文件:#include <shellapi.h>函数原型:ShellExecute(HWND hWnd,LPCSTR lpOperation,LPCSTR lpFileName,LPCSTR lpParameters,LPCSTR lpDirectory,int nShowCmd) HWND hWnd...原创 2019-12-26 21:12:23 · 4485 阅读 · 1 评论 -
windows游戏编程:球球大作战(吃鸡版)源码
源码介绍:https://blog.csdn.net/alzzw/article/details/100043938#include "stdafx.h"是win32程序系统生成的创建项目时选择win32程序项目除了下面代码外,无其他改动#include "stdafx.h"#include <SDKDDKVer.h>#include <graphi...原创 2019-12-09 19:37:31 · 5272 阅读 · 8 评论 -
C语言初学者编程小题
1.将用getchar输入的一个小写字符转化成大写输出,并输出小写字母的ASCII值和字母表中的位置,例:“D,100,4”#include <stdio.h>int main() { char ch,UpCh; ch = getchar(); if(ch >= 'a' && ch <= 'z') UpCh = ch -32; ...原创 2019-12-05 11:02:35 · 803 阅读 · 0 评论 -
Windows消息机制的逆向分析(全面理解windows消息机制)
目录一、 Windows消息机制流程(1)消息 (2) Windows窗体的创建(3).Windows消息的处理二、一个简单实例三、更深入一步分析一、 Windows消息机制流程(1)消息 消息系统对于一个Windows程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件。消息本身是作为一个...转载 2019-11-14 20:44:51 · 867 阅读 · 0 评论 -
win32程序开发流程详解
Win32 程序开发流程Windows 程序分为「程序代码」和「UI资源」两大部份,两部份最后以RC编译器整合为一个完整的EXE 文件(图1-1)。所谓UI 资源是指功能菜单、对话框外貌、程序图标、光标形状等等东西。这些UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico、.bmp、.cur 等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC...原创 2019-11-08 17:12:43 · 962 阅读 · 0 评论 -
Console 程序与DOS 程序的差别
不少人把DOS 程序和console 程序混为一谈,这是不对的。以下是各方面的比较。编写方式在Windows 环境下的DOS Box 中,或是在Windows 版本的各种C++ 编译器套件的整合环境(IDE)中(第4章「Console 程序项目管理」),利用Windows 编译器、联结器做出来的程序,都是所谓Win32 程序。如果程序是以main 为进入点,调用C runtim...原创 2019-11-08 15:52:38 · 445 阅读 · 0 评论 -
malloc,vmalloc,kmalloc区别
1、kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存2、kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,malloc和vmalloc保证的是在虚拟地址空间上的连续3、kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大4、vmalloc比kmalloc要慢。尽管在某些情况下才需要...原创 2019-10-02 09:20:19 · 2748 阅读 · 0 评论 -
指针数组,数组指针,指针函数,函数指针
数组指针:即指向数组的指针 int (*p)[n]()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨越n个整型数据的长度。指针数组:即用于存储指针的数组,也就是数组元素都是指针 int *p[n];[]的优先级高,先于p结合成为一个数组,再由int* 说明这是一个整型指针数组,它有n个指针类型...原创 2019-10-02 09:26:39 · 273 阅读 · 0 评论 -
malloc 和 new 的区别
申请内存的区域不同malloc 是从堆上(heap)分配内存new 可以说是在堆上分配的,但是严谨来讲 他是分配在 自由存储区(free store)上的返回的类型不同malloc 后返回是 void* 我们需要自己强制转换成需要的类型new 返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换需不需要指定内存大小malloc 需要显式地指出所需内存的尺寸...原创 2019-10-02 09:34:08 · 178 阅读 · 0 评论 -
C++中基本数据类型字节数及取值范围
数据类型名称 字节数 别名 取值范围 int * signed,signed int 由操作系统决定,即与操作系统的"字长"有关 unsigned int * unsig...原创 2019-10-02 09:43:20 · 392 阅读 · 0 评论 -
C/C++各算符优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[整型表达式] 左到右 () 圆括号...原创 2019-10-02 09:45:00 · 276 阅读 · 0 评论 -
main函数参数说明
为main函数传参时,可选的main函数原形为:int main(int argc , char* argv[],char* envp[]);参数说明: ①、第一个参数argc表示的是传入参数的个数 ②、第二个参数char* argv[],是字符串数组,用来存放指向的字符串参数的指针数组,每一个元素指向一个参数。各成员含义如下: argv[0]:指向程序运行的全路径名...原创 2019-10-04 18:17:26 · 1266 阅读 · 0 评论 -
全局变量、局部变量、静态全局变量、静态局部变量的区别(与常见面试基础题)
1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量...原创 2019-10-04 18:26:38 · 5820 阅读 · 0 评论 -
C++11智能指针详解
参考资料:《C++ Primer中文版 第五版》我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delet...转载 2019-09-04 11:05:34 · 742 阅读 · 0 评论