自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 资源 (4)
  • 收藏
  • 关注

原创 C++条件编译指令:#if、#elif、#ifdef、#ifndef、#elifdef、#elifndef、#else、#endif

预处理指令控制预处理器的行为。编译器将源代码生成目标程序时,预处理器在编译前的翻译阶段4执行,预处理的结果会生成单个文件,这个文件会传递给实际的编译器。 条件编译指令用于控制预处理器根据条件判断决定是否编译某段代码。这一行为由 #if、#elif、#ifdef、#ifndef、#elifdef (C++23起) 、#elifndef (C++23起)、#else、和 #endif 预处理指令控制。

2024-11-25 18:26:24 1902 1

原创 C++ASCII码表和字符操作

ASCII (American Standard Code for Information Interchange),美国信息交换标准代码,就是一种字符编码,用于将文本字符和控制字符与数字进行映射。大写字母 A ~ Z 的ASCII码 65 ~ 90,小写字母 a ~ z 的ASCII码 97 ~ 122,大写字母比小写字母的ASCII码小 32 (0b00100000,0x20),数字字符 0 ~ 9 的 ASCII码 48 ~ 57,字符串的终止符为 '\0',ASCII 码为 0。

2024-11-23 23:35:33 1699

原创 C++注释

注释是源代码内的文本内容,目的是方便人们根据注释阅读源代码。注释不会被编译到目标程序中,因为编译器将源代码生成目标程序时,每段注释都会被替换为单个空白字符从程序中移除。多行注释/* */,单行注释 //

2024-11-23 20:01:40 1026

原创 C语言存储类型 auto,register,static,extern

C语言存储类型关键字有:auto,register,static,extern;这些说明符放置在它们所修饰的类型之前。auto用于定义局部变量或函数形参;register用于定义局部变量或函数形参,寄存器变量不能用 & 取地址。extern关键字用于声明该全局变量或函数在其他文件中有定义,extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候。用static声明的局部变量,改变了这个局部变量的生存期为静态生存期;用static关键字修饰的全局变量,改变了这个全局变量的作用域为文件作用域

2024-09-13 11:08:09 1211

原创 DNS应答报文分析

DNS (Domain Name System),域名系统是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式系统,能够使人们更方便地访问互联网,DNS服务器使用UDP端口 53。在linux操作系统下,我们可以通过 host 命令,查询域名的IP地址,命令格式为:host -t A 域名,它的工作原理是怎样的呢,接下来,通过解析DNS应答报文,探索DNS工作原理。

2024-09-12 14:52:12 2121

原创 DNS查询报文分析

DNS (Domain Name System),域名系统是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式系统,能够使人们更方便地访问互联网,DNS服务器使用UDP端口 53。在linux操作系统下,我们可以通过 host 命令,查询域名的IP地址,命令格式为:host -t A 域名,它的工作原理是怎样的呢,接下来,通过解析DNS查询报文,探索DNS工作原理。

2024-09-11 16:35:16 1953

转载 IP协议头部中的8位服务类型TOS字段说明

IP协议头部中的8位服务类型TOS字段中。对于一般的IP报文,前3bit的值是000,用不上该优先权子字段;中间4bit字段中,表示的是服务类别,并且该4bit字段中,只能有一个bit字段为1。1000 -- 最小延迟0100 -- 最大吞吐量0010 -- 最高可靠性0001 -- 最小费用0000 -- 一般服务末尾1bit字段中,该字段未使用必须为0。

2024-09-11 10:41:27 681

原创 ARP协议报文分析

ARP(Address Resolution Protocol,地址解析协议)协议属于网络层协议,它实现了将目的主机的 IP 地址转换为 MAC 地址(物理地址)。ARP工作原理主机向自己所在的网络(比如家用路由器)广播一个 ARP请求(request),该请求包含目的主机的IP地址,此网络上的其它主机都将收到这个请求,但只有被请求的目的主机会回应一个 arp 应答(reply)。ARP 协议报文格式: 硬件类型(2字节)协议类型(2字节)硬件地址长度(1字节)协议地址长度(1字节)操作(2字节)源MAC

2024-09-10 12:26:11 3054

原创 搭建多台能够互相 telnet 的 centos 虚拟机

搭建多台能够互相 telnet 的 centos 虚拟机1. 安装 centos 虚拟机2. 虚拟机网络设置3. 安装 telnet4. 开启 telnet 服务5. telnet6. 问题总结

2024-09-09 14:43:18 1753

转载 yum update 报错:Cannot find a valid baseurl for repo: base/7/x86_64解决办法

yum update 报错:Cannot find a valid baseurl for repo: base/7/x86_64解决办法curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误" One of the configured repositories failed (未知), and yum doesn't have enough cached data to continue. At this point the o

2024-09-09 11:47:01 495 2

原创 C语言作用域

作用域 (scope) 是描述程序可以访问标识符的区域。块是一对花括号 {} 括起来的区域 或 函数体内任意复合语句定义范围内的区域。定义在块中的变量具有块作用域。块作用域的变量的可见范围从定义处开始到该块定义范围的末尾为止。函数作用域是在整个函数体内可见的意思,在 C 程序中,函数形参和 goto 语句的标签具有函数作用域,在整个函数体内可见。在所有函数外定义的变量具有全局作用域,在整个程序都可见。在数据类型前加 static 关键字定义的全局变量具有文件作用域。

2024-09-07 23:15:53 1258

原创 C语言常量和字面量

字面量是直接在代码中使用的程序运行期间不会改变的没有名字的固定值。所以我们只能用字面量来称呼它,故叫字面量。常量是用预处理器指令 #define 或 const 关键字定义的在程序运行期间不会改变的在代码中有名字的固定值。使用 #define 和 const 定义常量的区别:使用 #define 定义的常量会在预处理阶段用它对应的字面量替换掉代码中的常量字符标识,在程序运行期间内存中并不存在该常量。使用 const 定义的常量是具有数据类型和作用域的常量,在程序运行期间内存中是存在该常量的符号标识的

2024-09-06 22:26:45 1467

原创 shell 学习笔记:数组

shell 定义数组的格式为:arr=(v1 v2 v3 ... vn),数组中可以存放多个值。Bash Shell 只支持一维数组,初始化时不需要定义数组大小。数组元素的下标由 0 开始。shell 数组用括号 () 来表示,元素用空格符号分割开。读取数组元素值的一般格式为:${数组名[下标]};使用 ${数组名[*]} 或 ${数组名[@]} 可以获取到一个数组的所有元素列表;shell 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素,定义关联数组:declare -A array

2024-09-05 21:12:30 473

原创 C语言变量

在C语言中,我们可以认为变量是指向某一个块数据可以被修改的内存的标识符。变量名,即变量的标识符。变量定义是告诉编译器变量的数据类型和名字,并创建它。变量是左值。C语言中,变量的作用域 (Scope) 是指变量在程序中可见的区域。在函数或块内部定义的局部变量对应的作用域为局部作用域。在所有函数外部定义的全局变量,具有全局作用域,全局变量在整个程序可见。在函数定义中定义的函数形参具有函数形参作用域,形参变量在该函数内可见。对于同名变量,内层作用域会屏蔽外层的作用域。

2024-09-05 18:40:49 2106

原创 shell 学习笔记:向脚本传递参数

在执行 shell 脚本的时候,可以向脚本传递参数,脚本内获取参数的方式:$n,n 为 >= 0 的整数,其中 $0 存放的是脚本名称,$1 存放的是第 1 个参数,$2 存放的是第 2 个参数,依此类推。$# 传递给脚本的参数个数;$$ 脚本运行的当前进程的 id;$! 后台运行的最后一个进程的 id;$@ 单独输出 echo $@与 echo $* 效果相同,都是输出所有参数到屏幕,但使用时加 "" 号,比如 "$@" 会返回参数列表,而 "$*" 会返回一个由所有参数组成的字符串。

2024-09-04 14:54:09 1521

原创 shell 学习笔记:变量、字符串、注释

在 Shell 编程中,变量是用于存储数据值的名称。name="jim" #定义变量 echo $name #使用变量。变量名和等号之间不能有空格,定义变量时,变量名不加 $ 符号,使用时需要加 $ 符号。字符串拼接,获取字符串的长度,提取子字符串。单行注释:用井号 (#) 来注释单行,会被解释器忽略。多行注释:使用 Here 文档 或 直接使用 : 号,格式为:: + 空格 + 单引号。

2024-09-03 22:39:29 1137

原创 shell 学习笔记: 第一个 shell 脚本

#!/bin/bash echo "hello shell"#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。echo 命令用于向窗口输出文本。运行 shell 脚本的两种方法1.作为可执行程序chmod +x ./hello_shell.sh #使脚本具有执行权限./hello_shell.sh #执行脚本2. 作为解析器的参数sh hello_shell.sh

2024-09-03 10:39:31 474

原创 C语言:基本数据类型 char, short int, int

char 类型,主要用于存储字符的 ASCII码,占用内存大小为 1 个字节。 short int 类型,占用内存大小为 2个字节。int 类型,占用内存大小为 4个字节。在计算机科学中,一般可以用二进制,八进制,十进制,十六进制来表示一个同一个数据,所以在 C 语言中,对于一个整型常量,也有4种书写格式。比如,一个 short int 类型数字 12默认为十进制书写方式:12以数字0开头为八进制书写方式:014以0b开头为二进制书写方式:0b0000000000001100

2024-09-02 17:23:25 4095

原创 C语言:大小端模式、判断大小端、大小端转换

对于一个存储空间大于 1 个字节的数据,在内存中有两种存储模式,大端模式 (big-endian):数据的高字节在内存的低地址存放,数据的低字节在内存的高地址存放小端模式 (little-endian):数据的高字节在内存的高地址存放,数据的低字节在内存的低地址存放。判断主机字节序 (主机大小端),可以用联合体(union),指针,强制转换成 char 类型等方法。用位操作进行大小端转换,在网络编程中,也可以使用 htonl, htons, ntohl, ntohs 等函数。

2024-09-02 01:34:24 8536

原创 C语言:ASCII码表和字符操作

ASCII (American Standard Code for Information Interchange),美国信息交换标准代码,就是一种字符编码,用于将文本字符和控制字符与数字进行映射。大写字母 A ~ Z 的 ASCII码 65 ~ 90。小写字母 a ~ z 的 ASCII码 97 ~ 122。字符串的终止符为 '\0',ASCII 码为 0。换行符 '\n' 的 ASCII码为 10 (0x0A)。字母大小写转换,数字转数字字符。

2024-08-31 22:33:30 10408

原创 由浅入深学习 C 语言:Hello World【提高篇】

通过反汇编分析 Hello World 程序,析解 C 语言程序底层的工作原理。 在 C 语言,所有函数的调用,是通过栈来实现的,当函数被调用时,其返回地址、参数以及局部变量会被压入栈中。当函数返回时,这些信息会从栈中弹出,以恢复到函数被调用之前的状态。我们可以称维护所有函数调用形成的这个栈空间为函数调用栈。一个 C 程序的栈是往下生长的,即栈底在高地址,栈顶在低地址,入栈,栈顶地址会变小,出栈,栈顶地址会变大。

2024-08-30 16:39:46 1755

原创 由浅入深学习 C 语言:Hello World【基础篇】

#include // 这行是一个预处理器指令,用于将标准输入输出头文件 stdio.h 包含进源文件中int main() // 这行是程序的主函数,C 语言的入口函数是从这个函数开始的{ printf("Hello World\n"); /* 这行调用了 printf 函数,它是头文件中定义的一个函数,用于在控制台打印字符串。\n是一个转义序列,表示换行。*/ return 0; // 这行表示函数正常返回}

2024-08-28 22:01:53 1429

原创 实验11 编写子程序《汇编语言》- 王爽

实验11 编写子程序《汇编语言》- 王爽,编写一个子程序,将包含任意字符,以 0 结尾的字符串中的小写字母转变成大写字母,描述如下。名称:letterc 功能:将以 0 结尾的字符串中的小写字母转变成大写字母参数:ds:di 指向字符串首地址

2024-08-25 18:40:14 503

原创 汇编语言:cld, std, movsb, movsw, rep, rep movsb, rep movsw 指令

cld 指令:cld (clear df) 指令,清空 df 标志位,执行该指令后,df = 0;std 指令:std (set df) 指令,设置 df 标志为,执行该指令后,df = 1;movsb (move string byte) 指令,即按字节传送数据的字符串传送指令;movsw(move string word) 指令,即按字传送数据的字符串传送指令;在汇编语言中,rep 的作用是根据 cx 的值,循环执行跟在其后的指令,直到 cx = 0 时为止。rep movsb;

2024-08-25 14:59:24 2565

原创 汇编语言:cmp、je、jne、jb、jnb、ja、jna 指令

cmp (compare) 是比较指令,cmp 的功能相当于减法指令,只是不保存结果,但会根据结果对标志寄存器进行设置,cmp指令格式:cmp 操作对象1, 操作对象2。je(jump equal),等于则转移; jne(jump not equal),不等于则转移;jb(jump below),小于则转移;jnb(jump not below),不小于则转移;ja(jump above),高于则转移;jna(jump not above),不高于则转移。

2024-08-24 18:10:52 9454 1

原创 汇编语言:adc指令 和 sbb指令

adc (add carry)是带向假想的更高位进位加法指令,它利用了标志寄存器上 CF 标志位记录的进位值。CPU 提供 adc 指令的目的是用 adc 指令和 add 指令相配合,从而可以对更大的数据进行加法运算。sbb(subborrow)是带向假想的更高位借位减法指令,它利用了标志寄存器上 CF 标志位记录的进位值。CPU 提供 sbb指令的目的是用 sbb指令和 sub指令相配合,从而可以对更大的数据进行减法运算。

2024-08-23 18:17:10 2692

原创 汇编语言:标志寄存器ZF, PF, SF, CF, OF, DF, IF, AF 和 pushf, popf 指令

8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(Program Status Word,PSW)。OF(Overflow Flag):溢出标志位,一般情况下,它记录了有符号运算的结果是否发生了溢出。DF(Direction Flag):方向标志位,在串行处理指令中,控制每次操作后si、di的增减。IF(Interrupt Flag):中断标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则屏蔽外部中断。SF(Signed Flag):符号标志

2024-08-22 22:58:00 5046

原创 实验10 编写子程序《汇编语言》- 王爽

实验十 编写子程序 1. 显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使用者可以决定显示的位置(行、列)、内容和颜色。2. div 指令做除法,当进行8位除法的时候,用al存储结果的商,ah存储结果的余数;当进行16位除法的时候,用ax存储结果的商,dx存储结果的余数。可是现在有一个问题,如果结果的商大于al或ax所能存储的最大值,那么将引发CPU的一个内部错误,这个错误被称为:除法溢出,我们可以用下面的子程序 divdw 解决

2024-08-21 00:54:38 860

原创 汇编语言:call和ret配合使用设计模块化程序

call和ret指令配合使用设计模块化程序,用栈传递参数这种技术和高级语言编译器的工作原理密切相关。bp(base pointer,基址指针)寄存器和 sp(stack pointer,栈顶指针)共同管理函数调用栈。bp 寄存器用于保存进入函数时的栈顶基址,用于作为正在运行的函数的栈帧的栈底,每一个函数都有自己的栈帧,函数栈帧的大小并不固定,一般与其对应函数的局部变量多少有关。函数运行过程中,其栈帧大小也是在不停变化的。而 sp 寄存器永远指向栈顶位置。

2024-08-19 21:37:44 1445

原创 汇编语言:div指令和mul指令

div 是除法指令,格式:div bl;除数为8位,存放在bl寄存器中。div byte ptr ds:[0];除数为8位,存放在ds:[0]内存字节单元中。div bx;除数为16位,存放在bx寄存器中。div word ptr ds:[0];除数为16位,存放在ds:[0]内存字单元中。mul是乘法指令,格式:mul bl;8位乘法,一个数默认放在al 8位寄存器中,另一个数存放在bl 8位寄存器中。mul byte ptr ds:[0];mul word ptr ds:[0];mul bx。

2024-08-17 22:27:17 3471

原创 汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

call指令是转移指令,CPU执行call指令,进行两步操作:(1)将当前IP或当前CS和IP压入栈中(2)转移。call 标号指令功能:将当前IP压入栈中,然后转移到标号处执行指令。call far ptr标号指令功能:将当前CS压入栈中,然后再将当前IP压入栈中,最后转移到标号处执行指令。call 16位寄存器指令功能:将当前IP压入栈中,然后转移到寄存器中指明的目的地址处执行指令。call word ptr 内存单元地址指令功能:将当前IP压入栈中,然后转移到内存中指明的目的地址处执行指令。

2024-08-17 14:17:57 2734

原创 汇编语言:ret和retf指令

ret指令用栈顶中的数据,修改IP的内容,从而实现近转移。CPU执行ret指令时,相当于执行:pop IP。retf指令同时用栈顶中的数据,修改IP和CS,从而实现远转移。CPU执行retf指令时,相当于执行:(1)pop IP;(2)pop CS。

2024-08-16 14:53:45 1246

原创 实验9 根据材料编程《汇编语言》- 王爽

实验9 根据材料编程,编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 'welcome to masm!'

2024-08-16 11:00:56 1001

原创 汇编语言:loop指令

loop指令是循环指令,在8086CPU中,所有的循环指令都是短转移,其对应的机器指令有2个字节,低8位字节存放的是操作码;高8位字节存放的是转移位移(相对于当前IP的位移),用补码形式表示,范围在:-128 ~ 127,指令格式为:loop 标号

2024-08-14 20:44:22 2822

原创 汇编语言:jcxz 指令

在汇编语言中,jcxz 标号指令是一个有条件转移指令,用于检测CX寄存器的值,如果CX寄存器的值为0,则跳转到指令中标号所指定的地址处执行;否则,指令将继续顺序执行。‌

2024-08-14 18:37:15 824

原创 汇编语言指令 jmp: jmp word ptr、jmp dword ptr、jmp 寄存器

1. jmp word ptr 内存单元地址 是段内转移指令,只修改IP:(IP) = (内存单元地址)2. jmp dword ptr 内存单元地址 是段间转移指令,同时修改CS和IP:(CS) = (内存单元地址 + 2),(IP) = (内存单元地址)3. jmp 段地址:偏移地址 是段间转移指令,执行该指令后,CS = 段地址,IP = 目的地址

2024-08-13 23:01:06 1604

原创 汇编语言指令 jmp:jmp short、jmp near ptr、jmp far ptr

jmp short 是段内短转移指令,只修改IP的值,其机器码有2个字节,低8位是用于表示jmp的段内短转移指令的指令编码,高8位是用补码形式表示的位移信息,转移的范围:-128 ~ 127。jmp near ptr 是段内近转移指令,只修改IP的值,其机器码有3个字节,低8位是用于表示jmp的段内近转移指令的指令编码,高16位是用补码形式表示的位移信息,转移的范围:-32768~ 32767。jmp far ptr 是根据目的地址进行转移的段间转移指令(又称为远转移指令),可以同时修改CS和IP。

2024-08-13 22:59:49 2893

原创 二叉查找树、二叉搜索树、二叉排序树算法分析及实现

二叉查找树(Binary Search Tree,简称 BST),又称为二叉搜索树、有序二叉树(Ordered Binary Tree)。二叉查找树或是空二叉树,或是满足以下三个性质的二叉树。若其左子树非空,则左子树上所有节点的值都小于根节点的值若其右子树非空,则右子树上所有节点的值都大于根节点的值其左右子树也分别是一棵二叉查找树

2024-04-12 21:41:01 1776

原创 图解二叉树遍历方法-前序遍历、中序遍历、后序遍历

前序遍历二叉树(Pre-order Traversal)的规则为:从根结点出发,先访问该结点,然后前序遍历该结点的左子树,再然后前序遍历该结点的右子树。中序遍历二叉树(In-order Traversal)的规则为:从根结点出发,先中序遍历该结点的左子树,然后访问该结点,再然后中序遍历该结点的右子树。后序遍历二叉树(Post-order Traversal)的规则为:从根结点出发,先后序遍历该结点的左子树,然后后序遍历该结点的右子树,再然后访问该结点。

2024-04-11 01:39:56 6374

原创 扩展二叉树前序遍历序列构建二叉树(图解)

是 n(n >= 0)个结点(每个结点最多只有2棵子树)的有限集合,该集合可为空集(称为空二叉树),或由一个根节点和两颗互不相交的,称为根节点的左子树和右子树的二叉树组成。:将二叉树中的每个结点的空子结点用一个虚拟结点表示,其值为一特定的值,比如"#",这样每个结点都有两个子结点,这种处理后的二叉树为原二叉树的扩展树。扩展二叉树就可以做到一个遍历序列确定一颗二叉树。例如:图1为一颗二叉树,图2为这颗二叉树的扩展二叉树:先访问根结点,然后遍历左子树,最后遍历右子树。

2024-04-09 11:39:38 4445 3

对象池模板

使用对象池,减少new和delete的次数,提供运行效率,减少内存碎片,统一管理内存,防止new和delete用得不当导致内存泄露,对应的博客链接:http://blog.csdn.net/d704791892/article/details/40486261

2014-10-27

VC发送自定义消息

VC/MFC发送自定义消息Demo,源码对应的博客链接为:http://blog.csdn.net/d704791892/article/details/22829133

2014-04-02

CListCtrl控件实现Item项拖拽效果

实现CListCtrl控件的Item项拖拽效果,本源码对应的博客链接为:http://blog.csdn.net/d704791892/article/details/22600075

2014-03-30

MFC实现文件拖拽功能

MFC类库提供的CListCtrl类是不可以拖拽文件的,本代码子类化CListCtrl类,实现文件拖拽功能,供大家参考参考,希望小小代码能够帮到大家解决问题。

2013-04-06

空空如也

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

TA关注的人

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