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 色彩代码是一个标准,但由于不同平台和终端的实现方式和支持程度不同,导致了颜色在不同平台上的显示可能会有所差异。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue+ant-design+formBuiler表单构建器——技能提升——form design——亲测有效

最近看到后端同事在弄一个后台管理系统&#xff0c;额&#xff0c;前端真的是夹缝中生存啊&#xff0c;AI抢饭碗&#xff0c;后端也想干前端的活儿。。。 他用到了表单构建器&#xff0c;具体效果如下: 网上有很多适用于ElementUi和ant-design的form design插件&#xff0c;下…

深度学习Day-16:实现天气预测

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a;根据提供的数据集对RainTomorrow进行预测 一、 基础配置 语言环境&#xff1a;Python3.7编译器选择…

CSS伪类选择器

目录 前言&#xff1a; 链接伪类&#xff1a; 用户行为伪类&#xff1a; 元素状态伪类&#xff1a; 结构化伪类&#xff1a; 否定伪类&#xff1a; 目标伪类&#xff1a; 输入伪类&#xff1a; 前言&#xff1a; 在CSS中有一种特殊的选择器&#xff1a;伪类选择器&…

3D翻页电子画册制作零基础制作

随着科技的不断发展&#xff0c;3D翻页电子画册逐渐成为了一种流行的展示方式。它不仅具有丰富的视觉冲击力&#xff0c;还能带来更好的用户体验。如果你是零基础&#xff0c;不用担心&#xff0c;我将为你详细介绍如何制作3D翻页电子画册。让你轻松入门&#xff0c;创作出属于…

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

【qt】QString字符串

前言&#xff1a; 这节很轻松&#xff0c;大家可以放心食用 ♪(&#xff65;ω&#xff65;)&#xff89; QString目录 一.与cString的区别二.隐式共享三.初始化四.判断是否为空串五.字符串的长度六.添加字符串1.尾加2.任意位置加 七.替换字符串八.修改字符串九.删除字符串1.清…

Elastic 基于 RAG 的 AI 助手:利用 LLM 和私有 GitHub 问题分析应用程序问题

作者&#xff1a;来自 Elastic Bahubali Shetti 作为 SRE&#xff0c;分析应用程序比以往更加复杂。 你不仅必须确保应用程序以最佳状态运行以确保良好的客户体验&#xff0c;而且还必须了解某些情况下的内部工作原理以帮助排除故障。 分析基于生产的服务中的问题是一项团队运动…

EOCR-DS3T-05S电动机保护器 施耐德 EOCR-DS3系列

EOCR-DS3T-05S电动机保护器 施耐德 EOCR-DS3系列型号&#xff1a; EOCR-DS3-05S EOCR-DS3-30S EOCR-DS3-60S EOCR-DS3T-05S EOCR-DS3T-30S EOCR-DS3T-60S 基于MCU&#xff08;微处理器&#xff09;的2CT型产品 ■ 实时处理/高精度 ■ 电流设定范围&#xff1a;05型&#xff1…

【SpringBoot整合系列】SpringBoot整合Thymeleaf

目录 背景Thymeleaf简介Thymeleaf的特征模板引擎是什么 代码示例1.引入依赖2.修改配置文件&#xff0c;添加Thymeleaf的配置信息3.编写HTML模板文件4.编写控制器&#xff0c;返回ModelAndView&#xff0c;进行视图渲染 Thymeleaf语法1.常用标签/属性1.1 th:action1.2 th:method…

SpringBoot 使用Outlook邮箱发送邮件

目录 一、开启Outlook设置 二、依赖 三、配置文件 四、代码调用 一、开启Outlook设置 开启设置如图&#xff1a; 二、依赖 <!-- 邮箱依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mai…

Java -- (part25)

一.Junit单元测试 1.概述 是一个单元测试框架,可以代替main方法去执行其他的方法 2.使用 a.导入jar包 b.注解 Test:单独执行一个方法 Before:在Test之前执行,有几个Test就有几个Before After:在Test之后执行,有几个Test就有几个After 二.类的加载机制 1.类的加载时机…

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统 员工上班刷视频&#xff01; 员工上班炒股&#xff01; 员工上班干副业&#xff01; 碰见这种情况怎么办&#xff1f;当然是用电脑监控软件来监视员工的一举一动了&#xff0c;那么这样的软件有哪些呢&#…

充电桩测试:选择适合的负载箱

随着电动汽车的普及&#xff0c;充电桩的需求也在不断增加。为了保证充电桩的性能和安全&#xff0c;对其进行测试是非常重要的。在充电桩测试过程中&#xff0c;选择合适的负载箱是关键。本文将介绍如何选择合适的负载箱进行充电桩测试。 在进行充电桩测试之前&#xff0c;首先…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…

【CTF-Crypto】RSA-选择明密文攻击 一文通

RSA&#xff1a;选择明密文攻击 关于选择明/密文攻击&#xff0c;其实这一般是打一套组合拳的&#xff0c;在网上找到了利用的思路&#xff0c;感觉下面这个题目是真正将这个问题实现了&#xff0c;所以还是非常棒的一道题&#xff0c;下面先了解一下该知识点&#xff1a;(来自…

【可实战】被测需求理解(需求文档是啥样的、从哪些角度进行需求评审、需求分析需要分析出哪些内容、如何提高需求分析能力)

产品人员会产出一个需求文档&#xff0c;然后组织一个需求的宣讲。测试人员的任务就是在需求宣讲当中&#xff0c;分析需求有没有存在一些问题&#xff0c;然后在需求宣讲结束之后通过分析需求文档&#xff0c;分析里面的测试点并预估一个排期。 一、需求文档是什么样的&#x…

SmartEDA电路仿真软件风靡教育圈:揭秘其背后的魅力所在

在当今的电子信息时代&#xff0c;随着科技的飞速发展&#xff0c;电路设计与仿真软件在教育领域的应用越来越广泛。特别是SmartEDA这款电路仿真软件&#xff0c;以其强大的功能和直观易用的操作界面&#xff0c;赢得了众多教师的青睐。那么&#xff0c;究竟是什么原因让SmartE…

给汉字注音可以主要拼音不要声调吗?这两个注音小技巧你一定会需要

一&#xff0c;前言 在中文学习中&#xff0c;拼音是一种非常重要的工具&#xff0c;它帮助学习者正确地发音和理解汉字。然而&#xff0c;在拼音的使用中&#xff0c;一个常见的问题是是否应该包含声调。有些人认为&#xff0c;只要拼音中有声母和韵母&#xff0c;就可以准确…

如何使用client-go构建pod web shell

代码示例及原理 原理是利用websocket协议实现对pod的exec登录&#xff0c;利用client-go构造与远程apiserver的长连接&#xff0c;将对pod容器的输入和pod容器的输出重定向到我们的io方法中&#xff0c;从而实现浏览器端的虚拟终端的效果消息体结构如下 type Connection stru…

苏州金龙何以成为塞尔维亚中国客车第一品牌?研发向上服务助力!

5月7日至8日&#xff0c;一场举世瞩目的会晤在塞尔维亚举行。作为塞尔维亚中国客车第一品牌&#xff0c;苏州金龙海格客车也为当地民众绿色公共出行提供了“中国力量”。 目前&#xff0c;苏州金龙海格客车在塞尔维亚保有量近200台&#xff0c;是在塞尔维亚保有量最大的中国客车…