ANSI转义序列

一、ASCII码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)最初的设计是一个7位的字符编码,使用了从0到127的数字来表示字符。这意味着它总共可以表示128个不同的字符。这包括了英文大小写字母、数字、一些标点符号以及一些控制字符(如换行、回车等)。

后来,随着计算机技术的发展和对更多字符集的需求增长,ASCII码被扩展到了8位(1个字节)。这个扩展后的版本通常称为扩展ASCII或高ASCII,并且它允许包含额外的128个字符,从而总共可以表示256个字符。这些额外的字符集通常用来表示其他符号、控制代码,以及其他语言的特殊字符。

ASCII 字符集中的数字0到31以及数字127对应的是控制字符(control characters),也被称为非打印字符(non-printing characters)。它们不代表可视化的字符,而是用来控制文本的传输和显示行为。以下是一些常见控制字符的描述:

  • 0 (NUL): 空字符 (Null character),经常用于标记字符串的结束。
  • 1 (SOH): 标题开始 (Start of Header),用于通信协议中的消息开始。
  • 2 (STX): 正文开始 (Start of Text),标记文本实际内容的开始。
  • 3 (ETX): 正文结束 (End of Text),通常标记传输结束。
  • 4 (EOT): 传输结束 (End of Transmission),用于终止一个传输序列。
  • 5 (ENQ): 询问字符 (Enquiry),用于请求远端发送响应。
  • 6 (ACK): 确认字符 (Acknowledge),是对接收数据成功的响应。
  • 7 (BEL): 响铃 (Bell),当解释此字符时会发出声音或视觉信号。
  • 8 (BS): 退格 (Backspace),使光标向左移动一位。
  • 9 (HT): 水平制表符 (Horizontal Tab),用于控制文本的横向间隔。
  • 10 (LF): 换行 (Line Feed),在Unix和Unix-like系统中用于开始新的一行。
  • 11 (VT): 垂直制表符 (Vertical Tab),用于控制文本的纵向间隔。
  • 12 (FF): 走纸换页 (Form Feed),在打印机中用来将纸张推进到下一页的位置。
  • 13 (CR): 回车 (Carriage Return),在Mac OS之前和Windows系统中用于返回行首,并在Windows中与 LF 一起组合使用来开始新的一行。
  • 14 (SO): 移位输出 (Shift Out),用于临时切换到另一套字符集。
  • 15 (SI): 移位输入 (Shift In),用于返回标准字符集。
  • 16 到 31: 其他控制功能,包括文件分隔、组分隔、记录分隔等。
  • 127 (DEL): 删除 (Delete),用于删除前一个字符,通常是逻辑删除而非物理删除。

这些控制字符在现代文本编辑和显示中通常不经常直接使用,但在通信协议、文件格式和程序语言中仍发挥作用。例如,LFCR 在不同操作系统中的文本文件中作为换行的标记。而 NUL 字符经常用在某些编程语言中表示字符串的终止。

下面是ASCII码的详细对比表格,蓝色的是控制字符,没有填充色彩的是可显示字符。




二、ANSI转义序列

ANSI是(American National Standards Institute)的缩写。控制字符的数量限制使得它们不足以满足控制现代终端设备的所有需求,特别是在文本格式化和复杂的界面控制方面。为了解决这个问题,引入了转义序列这一概念,它允许使用更复杂的指令来控制终端的行为。

大部分情况下,ANSI转义序列都是以 ESC 开头的,所以是(ANSI escape codes)或者(ANSI escape sequences)。

1、ANSI转义序列C0列表:

这些是控制字符,用于文本处理中的特殊功能,如回车(CR)、换行(LF)等。这些字符的代码通常在ASCII的0x00到0x1F范围内。

也就是上面的表格的控制字符:

2、ANSI转义序列C1列表

C1控制字符用于扩展的文本控制目的,比如开始定向控制(SDC)或单字符强调(SCI)。这些字符的代码范围通常是0x80到0x9F。

序列符号码值名称作用
ESC N0x8eSS2-Single Shift Two用来从替代字符集中选择字符。在兼容ANSI的系统中,SS2通常用来临时切换到G2字符集,以访问特殊字符。
ESC O0x8fSS3-Single Shift Three用来从替代字符集中选择字符。在兼容ANSI的系统中,SS3用于临时切换到G3字符集。
ESC P0x90DCS-Device Control String用于传输设备控制信息,这些信息被设备或终端用来执行特定的硬件控制功能,例如,xterm中可能用来定义键位映射或请求设置。
ESC [0x9bCSI-Control Sequence Introducer用于引入一系列控制序列,它结束于ASCII 64到126之间的字符。此序列用于多种光标和显示控制操作。
ESC \0x9cST-String Terminator终止一个控制字符串,如APC、DCS、OSC、PM和SOS这样的序列。
ESC ]0x9dOSC-Operating System Command用于传输操作系统级别的命令或请求,如设置窗口标题或其他属性。在xterm中,这些控制序列可以由ST终止,或者通常也可以由BEL终止。
ESC X0x98SOS-Start of String用来标记一个控制字符串的开始,这个字符串不是用来被终端直接处理,而是作为私有消息传递给应用程序。
ESC ^0x9ePM-Privacy Message用于传输私有消息,这些消息不应该被记录或存储,用于敏感信息传输。
ESC _0x9fAPC-Application Program Command用于传输应用程序命令,这些命令通常由特定的软件应用来解释和执行。
ESC c0x1b cRIS-Reset to Initial State用于将终端或设备重置到其初始状态。可能包括重置图形属性、清除制表符、恢复默认字体等。

ANSI转义序列中的C1控制字符确实有其自己的范围,这些字符的代码通常在0x80到0x9F之间。不过,这些并不属于原始的7位ASCII码,而是属于扩展的8位字符集。原始的ASCII码只定义了0x00到0x7F的字符。

在8位字符集中,0x80到0x9F的部分被用于C1控制字符,它们主要在一些特定的编码和协议中使用,如ISO/IEC 8859和Windows-1252。这些字符在不同环境下的解释和使用可能会有区别。例如,在标准的ISO 8859-1编码中,这个范围内的字符是不可见的控制字符,而在Windows-1252编码中,部分字符被映射为可打印字符。

这些C1控制字符最初是为了多媒体、复杂文本布局和其他特殊用途而设计的。在现代系统中,它们的使用较少,相比之下,更常用的控制字符集是C0集合,尤其是在基于文本的界面和协议中。

3、Control Sequence Introducer(CSI)序列

Control Sequence Introducer(CSI)序列ANSI转义序列的一部分,就是上面ANSI转义序列C1列表背景为蓝色的一行,用于更加复杂的终端控制,如光标移动、文本格式设置、颜色变化等。CSI序列通常以(ESC,ASCII码为十进制的27 ,或十六进制 0x1B,或八进制的033,或转义字符\e)和左方括号[开头,紧跟着是参数字节、中间字节(如果有的话),并以最终字节结束。终端设备接收到转义符后,会预期接下来的字符形成一个完整的转义序列,并根据这些序列来执行相应的操作,而不是将这些字符显示在屏幕上。

ESC [ 参数字节 ; 参数字节 ... 中间字节 最终字节
  • ESC [:这两个字符是CSI序列的引导符,用于开始这个序列。
  • 参数字节:这些通常是数字字符,用于提供具体的参数,如光标位置、颜色代码或其他选项。参数之间可以用分号;分隔。
  • 中间字节:这部分是可选的,用于进一步控制或区分操作。
  • 最终字节:表示CSI序列的结束,并触发终端执行相应的命令。这通常是ASCII码表中的@~之间的字符。
组成部分字符范围ASCII
参数字节0x30–0x3F0–9:;<=>?
中间字节0x20–0x2Fspace、!"#$%&'()*+,-./
最终字节0x40–0x7E@A–Z[\]^_a–z{

CSI(Control Sequence Introducer)控制序列用于在终端中执行各种控制操作,例如移动光标、修改文本属性、清除屏幕等。解释:

  1. 参数的使用:CSI序列通常包含一系列参数,这些参数用分号分隔。例如,CSI序列可能是这样的形式:CSI Pn1;Pn2;...;PnN Ps1;Ps2;...;PsM C,其中Pn1;Pn2;...;PnN是数值参数,Ps1;Ps2;...;PsM是选择参数。如果某个参数缺失,通常被视为0。例如,CSI 1;;3中间的分号表示缺少参数,相当于CSI 1;0;3,即参数为1、0、3。

  2. 参数缺失情况下的默认值:某些情况下,缺少参数可能会被解释为默认值,例如CUU命令(向上移动光标),如果没有参数,通常会被解释为向上移动一个字符。所以,CSI A通常等同于CSI 1 A,即向上移动一个字符。

  3. 私有字符定义:一些CSI序列可能是私有的,这样终端制造商可以定义自己的控制序列而不与标准冲突。例如,CSI?25hCSI?25l序列用于打开和关闭光标显示,其中?25是私有序列,终端制造商可以根据自己的需求定义。

  4. 非法字符:如果CSI序列包含了超出规定范围的字符,其行为是未定义的。这些非法字符包括C0控制字符(0x00–0x1F)、DEL(0x7F),以及高位字节。

对于上面的最终字节一般会决定这个CSI序列的功能,然后参数字节和中间字节是对于后面的最终字节的参数,确定最终字节决定的功能的细节。可以在下面的列表中看到这些的体现。

下面是CSI的一些序列列表:

代码名称作用
CSI n ACUU - 光标上移将光标向上移动n个字符位置。如果n未指定,默认为1。如果光标已在屏幕边缘,则不执行任何操作。
CSI n BCUD - 光标下移将光标向下移动n个字符位置。如果n未指定,默认为1。
CSI n CCUF - 光标前移将光标向前移动n个字符位置。如果n未指定,默认为1。
CSI n DCUB - 光标后移将光标向后移动n个字符位置。如果n未指定,默认为1。
CSI n ECNL - 光标移到下一行将光标移动到下一行的开头,并向下移动n-1行。如果n未指定,默认为1。 (非ANSI.SYS)
CSI n FCPL - 光标移到上一行将光标移动到上一行的开头,并向上移动n-1行。如果n未指定,默认为1。 (非ANSI.SYS)
CSI n GCHA - 光标水平绝对将光标移动到当前行的第n列位置。如果n未指定,默认为1。 (非ANSI.SYS)
CSI n;mHCUP - 光标位置将光标移动到第n行第m列的位置。如果n或m未指定,默认为1。
CSI n JED - 擦除显示用于清除屏幕的部分区域。
CSI n KEL - 擦除行用于清除当前行的部分区域。
CSI n SSU - 向上滚动将整页内容向上滚动n行。新行添加到底部。(非ANSI.SYS)
CSI n TSD - 向下滚动将整页内容向下滚动n行。新行添加到顶部。(非ANSI.SYS)
CSI n;mfHVP - 水平垂直位置将光标移动到第n行第m列的位置,与CUP相同。
CSI n mSGR - 选择图形再现设置图形再现参数,包括文字颜色。
CSI 5i打开辅助端口启用辅助串行端口,通常用于本地串行打印机。
CSI 4i关闭辅助端口禁用辅助串行端口,通常用于本地串行打印机。
CSI 6nDSR - 设备状态报告向应用程序报告光标位置(CPR),其中n是行,m是列。
CSI sSCP - 保存光标位置保存当前光标位置。
CSI uRCP - 恢复光标位置恢复之前保存的光标位置。

表格中的CSI可以换成 ESC(ASCII码为十进制的27 ,或十六进制 0x1B,或八进制的033,或转义字符\e) 加上 [ 。

一些常用的CSI序列:

转义字符说明
\033[0m关闭所有属性
\033[1m设置高亮度
\033[4m下划线
\033[5m闪烁
\033[7m反显
\033[8m消隐
\033[30m-\33[37m设置前景颜色
\033[40m-\33[47m设置背景颜色
\033[nA光标上移n行
\033[nB光标下移n行
\033[nC光标右移n行
\033[nD光标左移n行
\033[y;xH设置光标位置
\033[2J清屏
\033[K清除从光标到行尾的内容
\034[s保存光标位置
\033[u恢复光标位置
\033[?25l隐藏光标
\033[?25h显示光标

4、SGR(Select Graphic Rendition)选择图形再现参数

1)SGR介绍

SGR(Select Graphic Rendition)是一种 ANSI 转义码序列,同样也是上面的 CSI 序列的一种,就是上面 CSI 序列表格中背景为蓝色的一行,用于在文本终端中设置文本属性,包括颜色、样式和其他外观效果。它允许开发者控制文本在终端上的呈现方式,从而创建出更丰富多彩的用户界面和输出效果。

SGR 序列由 ESC(Escape)字符后跟着零个或多个以分号分隔的参数组成,然后以字母 "m" 结束。参数用于指定要应用的不同文本属性,例如颜色、粗体、斜体等。每个参数都对应一个特定的文本属性,可以单独使用,也可以组合在一起以实现复杂的效果。

2)SGR参数

SGR(Select Graphic Rendition)选择图形再现参数表格:

代码作用备注
0重置/正常关闭所有属性。
1粗体或增加强度
2弱化(降低强度)未广泛支持。
3斜体未广泛支持。有时视为反相显示。
4下划线
5缓慢闪烁低于每分钟150次。
6快速闪烁MS-DOS ANSI.SYS;每分钟150以上;未广泛支持。
7反显前景色与背景色交换。
8隐藏未广泛支持。
9划除字符清晰,但标记为删除。未广泛支持。
10主要(默认)字体
11–19替代字体选择替代字体。
20尖角体几乎无支持。
21关闭粗体或双下划线关闭粗体未广泛支持;双下划线几乎无支持。
22正常颜色或强度不强不弱。
23非斜体、非尖角体
24关闭下划线去掉单双下划线。
25关闭闪烁
27关闭反显
28关闭隐藏
29关闭划除
30–37设置前景色参见下面的3位色。
38设置前景色下一个参数是5;n(8位色)或2;r;g;b(24位色),两种参数形式,参见下面的8位色和24位色。
39默认前景色由具体实现定义(按照标准)。
40–47设置背景色参见下面的3位色。
48设置背景色下一个参数是5;n(8位色)或2;r;g;b(24位色),两种参数形式,参见下面的8位色和24位色。
49默认背景色由具体实现定义(按照标准)。
51Framed
52Encircled
53上划线
54Not framed or encircled
55关闭上划线
60表意文字下划线或右边线几乎无支持。
61表意文字双下划线或双右边线
62表意文字上划线或左边线
63表意文字双上划线或双左边线
64表意文字着重标志
65表意文字属性关闭重置60–64的所有效果。
90–97设置明亮的前景色aixterm(非标准)。参见下面的4位颜色。
100–107设置明亮的背景色aixterm(非标准)。参见下面的4位颜色。

3)3位(不包括后面的明亮颜色)或4位色基本颜色代码:

前景色:

SGR参数颜色明亮颜色(粗体)
30黑色90(明亮黑色)
31红色91(明亮红色)
32绿色92(明亮绿色)
33黄色93(明亮黄色)
34蓝色94(明亮蓝色)
35品红95(明亮品红)
36青色96(明亮青色)
37白色97(明亮白色)

背景色:

SGR参数颜色明亮颜色(粗体)
40黑色背景100(明亮黑色背景)
41红色背景101(明亮红色背景)
42绿色背景102(明亮绿色背景)
43黄色背景103(明亮黄色背景)
44蓝色背景104(明亮蓝色背景)
45品红背景105(明亮品红背景)
46青色背景106(明亮青色背景)
47白色背景107(明亮白色背景)

颜色卡(这里是使用Microsoft Visual Studio 调试控制台得到的,不同平台可能不一样):

实例:

#include <stdio.h>int main() {// 黑色文字,红色背景printf("\033[30;41mBlack text on Red background\033[0m\n");// 明亮蓝色文字,黄色背景printf("\033[1;34;43mBright Blue text on Yellow background\033[0m\n");// 明亮白色文字,品红背景printf("\033[1;37;45mBright White text on Magenta background\033[0m\n");return 0;
}

运行结果:

小特性:

对于这里的参数,如果在printf这类格式化打印的函数中甚至可以实现这样:

	int num = 46;printf("\033[%dm      \033[0m\n", num);

运行结果:

这里的参数使用printf格式化字符串的特性,利用printf后面的参数来改变这里的参数。可以利用 printf 函数的格式化字符串功能以及后续的参数来动态地改变 ANSI 转义序列中的值。同时这里还有一个现象,就是设置好背景色后再打印空格,就可以打印一定长度的色块。

一般在printf中使用 \033[1;37;45m 之类的转义字符来对打印内容的前景和背景的颜色进行调整后,要再次使用 \033[0m 转义字符来重置所有属性,以防对后面的颜色调整产生影响。

可以发现这里的转义序列可以同时对多个属性进行调整,例如 \033[1;37;45m 同时设置粗体(明亮)字体、白色前景(字体)和品红背景三个属性。

8位色提供了更广泛的颜色选择,让开发者可以从256种预定义的颜色中选择。这是一种更灵活的颜色控制方式,允许更细粒度地定义所需的颜色。

下面介绍8位色和24位色:

在8位色或24位色的情况下决定前景和背景与决定颜色的代码分开了,先使用38(前景)或48(背景)确定下面的颜色参数是设置前景还是背景。

当在38或48之后使用参数时,可以使用以下两种格式之一:

  1. 5;n:这种格式用于选择256色调色板中的颜色,也就是8位色。其中,n是0到255之间的整数,对应于预定义的颜色索引。

  2. 2;r;g;b:这种格式用于指定RGB颜色,也就是24位色。其中,r、g和b是0到255之间的整数,分别代表红、绿和蓝的亮度值。

例如,要选择256色调色板中的第200种颜色,可以使用ESC[38;5;200m。要选择RGB颜色(255, 0, 128),可以使用ESC[38;2;255;0;128m

4)8位色

格式:

  • 前景色ESC[38;5;n ... m
  • 背景色ESC[48;5;n ... m

参数38确定是设置前景色,参数48确定是设置背景色。其中,n是0到255之间的整数,对应于预定义的颜色索引,...代表其他参数,m是结束字符。

颜色范围:

8位色提供了256种不同的颜色,范围从0到255。这些颜色包括:

  • 0-7:标准颜色,与ANSI标准的30-37前景色和40-47背景色相对应。
  • 8-15:高强度颜色,通常与标准颜色的亮度略有不同,与ANSI标准的90-97前景色和100-107背景色相对应。
  • 16-231:这个范围内的颜色是通过一种计算方法生成的,可以产生216种颜色。它们的色彩是由RGB色彩立方体中的各种组合生成的,其中红、绿和蓝的值各有6个等级。

    具体的计算公式为:16 + 36 \times r + 6 \times g + b,其中:( r, g, b ) 分别是红色、绿色和蓝色的强度值,每种颜色的强度值范围从0到5。这个公式允许每种颜色分量(红、绿、蓝)独立地选择从0到5的六个强度级别,也就是说(0 ≤ r,g,b ≤ 5),从而可以生成216种不同的颜色组合。

  • 232-255:这个范围内的颜色是从黑色到白色的24阶灰度色。

颜色卡(这里是使用Microsoft Visual Studio 调试控制台得到的,不同平台可能不一样):

使用示例:

  • 选择第200种颜色作为前景色:ESC[38;5;200m
  • 选择第50种颜色作为背景色:ESC[48;5;50m
  • 同时进行前景和背景的设置:ESC[38;5;200;48;5;50m

实例:

#include <stdio.h>int main()
{// 前景色为天蓝色(索引 33),背景色为浅灰色(索引 249)printf("\x1b[38;5;33;48;5;249mThis text has sky blue foreground and light grey background.\x1b[0m\n");// 前景色为深红色(索引 124),背景色为奶油色(索引 230)printf("\x1b[38;5;124;48;5;230mThis text has deep red foreground and cream background.\x1b[0m\n");// 前景色为粉红色(索引 211),背景色为深绿色(索引 22)printf("\x1b[38;5;211;48;5;22mThis text has pink foreground and dark green background.\x1b[0m\n");// 前景色为柠檬色(索引 190),背景色为深蓝色(索引 19)printf("\x1b[38;5;190;48;5;19mThis text has lemon foreground and navy blue background.\x1b[0m\n");// 前景色为橙色(索引 208),背景色为淡蓝色(索引 153)printf("\x1b[38;5;208;48;5;153mThis text has orange foreground and light blue background.\x1b[0m\n");return 0;
}

运行结果:

5)24位色(Ture color真彩色)

格式:

  • 前景色:ESC[38;2;r;g;bm
  • 背景色:ESC[48;2;r;g;bm

颜色范围:

在24位色格式中,每个颜色通道(红、绿和蓝)都有8位,允许的值范围是0到255。这意味着每个颜色通道可以有256种可能的亮度级别。因此,总的颜色可能性是256 × 256 × 256 = 16,777,216种可能的颜色。

由于24位色有16,777,216种可能的颜色,这里就不给出颜色卡了,网上有很多网站可以查看24位色代码对应的颜色。

使用示例:

  • 前景设置为明亮的蓝色(RGB值为0, 120, 215)ESC[38;2;0;120;215m
  • 背景设置为柔和的粉红色(RGB值为255, 182, 193)ESC[48;2;255;182;193m
  • 同时设置前景和背景色 ESC[38;2;0;120;215;48;2;255;182;193m

实例:

#include <stdio.h>int main()
{//桃色文本,薄荷绿背景:printf("\033[38;2;255;128;128m\033[48;2;64;255;170m Hello, World! \033[0m\n");//天蓝色文本,橙色背景:printf("\033[38;2;135;206;235m\033[48;2;255;165;0m Hello, World! \033[0m\n");//淡紫色文本,淡金色背景:printf("\033[38;2;216;191;216m\033[48;2;255;223;0m Hello, World! \033[0m\n");//橄榄绿文本,淡灰色背景:printf("\033[38;2;128;128;0m\033[48;2;211;211;211m Hello, World! \033[0m\n");//深粉色文本,海蓝色背景:printf("\033[38;2;255;20;147m\033[48;2;95;158;160m Hello, World! \033[0m\n");return 0;
}

运行结果:

并非所有的终端或命令行界面都支持所有的颜色和ANSI转义序列,这取决于你的终端程序和它的配置。而且尽管 ANSI 色彩代码是一个标准,但由于不同平台和终端的实现方式和支持程度不同,导致了颜色在不同平台上的显示可能会有所差异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从未入库的gerrit中撤销一个文件

用一个例子说明 比如有一个提交里面的default.xml的修改没有必要&#xff0c;需要从未入库的gerrit中移除 步骤如下&#xff1a; 1.做reset操作 git reset HEAD^ packages/SettingsProvider/res/values/defaults.xml 2.做checkout操作 git checkout packages/SettingsProv…

FileLink文件摆渡技术解析:如何实现数据的安全摆渡与隔离

文件摆渡系统&#xff0c;这一现代科技名词&#xff0c;蕴含着深刻的科技内涵和广泛的应用前景。简而言之&#xff0c;文件摆渡系统是一种高效、安全的文件传输工具&#xff0c;它能够在不同的网络环境之间实现文件的快速、稳定传输。在今天的数字化时代&#xff0c;随着数据量…

压缩机继电器EOCRDS-30NY7Q升级后型号:EOCRDS3-30S

EOCR-DS3系列型号&#xff1a; EOCRDS3-05S EOCRDS-05S EOCRDS1-05S EOCRDS3-30S EOCRDS-30S EOCRDS1-30S EOCRDS3-60S EOCRDS-60S EOCRDS1-60S EOCRDS3-05W EOCRDS-05W EOCRDS1-05W EOCRDS3-30W EOCRDS-30W EOCRDS1-30W EOCRDS3-60W EOCRDS-60W EOCRDS1-60W EOCR-DS3T-…

【递归、回溯和剪枝】二叉树中的深搜

⼆叉树中的深搜深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历完毕&#xff0c;然后…

数据结构的堆(c语言版)

一.堆的概念 1.堆的基本概念 在计算机科学中&#xff0c;堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列和动态分配内存。 2.堆的特征 堆是一个完全二叉树&#xff0c;它具有以下两个主要特性&#xff1a; 堆序性&#xff1a;对于最大堆&#xff0c;在堆中的任意节…

RockChip Android13 添加/删除ListPreference方法

概述: 本章将讲述在Android添加或删除ListPreference的几种方法,并以EthernetSettingsActivity为例,添加/删除一项ListPreference: 默认效果图: 添加后效果图: 方法一: 1、全部添加xml 在Activity类中使用addPreferencesFromResource()方法解析XML文件并添加Prefere…

glog的编译和使用

文章目录 glog的编译和使用概述笔记测试工程glog0.7这个版本是有问题的工程的预处理宏日志测试代码好使的代码效果备注 - 只有C风格的日志才好使备注 - glog用不到gflagEND glog的编译和使用 概述 想在DLL中打些日志&#xff0c;测试用。 没用起来。 将gflags和gtest都测试编…

离开大厂创业一年,从未受过这么大的打击!

大家好&#xff0c;我是程序员鱼皮。时间过得真快呀&#xff0c;转眼间我从腾讯出来、自主创业竟然已经整整一年了&#xff01;上周末也带团队同学们搞了场公司周年庆团建。 我自己是一个很喜欢、也很注重复盘总结的人&#xff0c;这么重要的时间&#xff0c;当然要对过去的一…

预测市场?预测股票?如何让预测有更高的准确率?

我们发现在足球赛中&#xff0c;只要知道一个简单的讯息&#xff08;主队过去的获胜机率超过一半&#xff09;&#xff0c;预测力就会明显好过随便乱猜。如果再加上第二个简单的讯息&#xff08;胜负纪录较佳的队伍会略占优势&#xff09;&#xff0c;可以再进一步提升预测力。…

Centos固定静态ip地址

这里我用的是Vmware虚拟机搭建的三台机器 进入 cd /etc/sysconfig/network-scripts然后使用 ip addr命令&#xff0c;查看自己虚拟机的以太网地址。 我这里是ens33 上面的第一个选项是本地环回地址&#xff0c;不用管它 然后查看刚刚进入的network-scripts目录下的文件 找到…

ChatPPT开启高效办公新时代,AI赋能PPT创作

目录 一、前言二、ChatPPT的几种用法1、通过在线生成2、通过插件生成演讲者模式最终成品遇到问题改进建议 三、ChatPPT其他功能 一、前言 想想以前啊&#xff0c;为了做个PPT&#xff0c;我得去网上找各种模板&#xff0c;有时候还得在某宝上花钱买。结果一做PPT&#xff0c;经…

2.1初识Spark

Spark于2009年诞生&#xff0c;最初是加州大学伯克利分校的研究项目。2013年加入Apache孵化器项目&#xff0c;2014年成为Apache顶级项目。Spark以内存内运算技术为核心&#xff0c;包含多个计算框架&#xff0c;成为大数据计算领域的后起之秀&#xff0c;打破了Hadoop的基准排…

域名系统(DNS)、DNS 服务器和 IP 地址概念解释

​  域名系统、DNS服务器和IP地址是构成互联网基础设施的重要部分。它们共同协作&#xff0c;使得人们能够方便地使用各种网络服务&#xff0c;而无需去记住复杂的数字地址。那么&#xff0c;域名系统、DNS 服务器和 IP 地址又该如何理解?本文主要讲讲关于这几个名词的概念解…

多线程使用说明

一、如何创建多线程 1、继承Thread类 如果调用run方法&#xff0c;相当于还是只有一条main线程&#xff0c;会把run的线程当成一条普通对象&#xff0c;如下&#xff0c;t会执行完再往下执行&#xff0c;这样t就不是一个线程类&#xff0c;而是一个普通的对象&#xff0c;所以必…

Python网络编程 03 实验:FTP详解

文章目录 一、小实验FTP程序需求二、项目文件架构三、服务端1、conf/settings.py2、conf/accounts.cgf3、conf/STATUS_CODE.py4、启动文件 bin/ftp_server.py5、core/main.py6、core/server.py 四、客户端1、conf/STATUS_CODE.py2、bin/ftp_client.py 五、在终端操作示例 一、小…

2024华为数通HCIP-datacom最新题库(变题版)

请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了&#xff0c;如果你准备去考试&#xff0c;还是用的之前的题库&#xff0c;切记暂缓。 H1…

本地搭建springboot服务并实现公网远程调试本地接口

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HTML5 Canvas发光Loading动画源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

8.删除有序数组中的重复项 II

文章目录 题目简介题目解答解法一&#xff1a;双指针&#xff08;快慢指针&#xff09;代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 删除有序数组中的重复项 II 相关的讲解&#xff01;&#x1f600; 题目简介 题目解…

学习100个Unity Shader (17) --- 深度纹理

文章目录 效果shader部分C# 部分理解参考 效果 shader部分 Shader "Example/DepthTexture" {SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _CameraDepthTexture;struct a2v{float4 pos : POSITIO…