- 我的博客:https://blog.youkuaiyun.com/qq_37388044
- 我的知乎:https://www.zhihu.com/people/bbtganmin
- 联系方式:知乎私信
转载或者引用本文内容请注明来源及原作者!
前言
日常开发中,我们会遇到各种各样的库。在移植库的过程中,我们会发现有些库的打印是有颜色的,这是怎么实现的呢?
一、linux终端控制描述
Linux控制台实现了VT102和ECMA-48/ISO 6429/ANSI X3.64终端控制的子集,这个子集很庞大,当然还有Linux自己私有的控制序列,以改变颜色配置,字符集映像,等等。
二、用法
1、格式
固定格式:“\033[”开头,“m”结尾,中间数字代表相应格式,如下:
printf("\033[1mHello wold! \033[0m\n");
- “\033”代表 ESC字符。ESC的ASCII码是十进制27,八进制033。
- ECMA-48中,“1”表示高亮显示,“0”表示默认。
- 上面语句中,“\033[1m”表示后面的字符格式改为高亮显示,“\033[0m”表示后面的字符恢复默认格式。所有,上面的语句打印出来“Hello wold!”会高亮显示。
2、同时设置多种格式
固定格式:“\033[”开头,“m”结尾,不同格式用“;”号隔开,如下:
printf("\033[1;31;42mHello wold! \033[0m\n");
- “31”表示字体红色,“42”表示背景绿色。
- 上面语句中,打印出来“Hello wold!”会高亮显示、红色字体、绿色背景。
三、ECMA-48 SGR 序列
ESC [ < parameters > m 设置显示属性. 同样的序列可以设置一个或多个属性.
param | result |
---|---|
0 | 所有属性重设为默认值 |
1 | 设置边框 |
4 | 设置下划线 |
5 | 设置闪烁 |
7 | 反显 |
24 | 关闭下划线 |
25 | 关闭闪烁 |
27 | 关闭反显 |
30 | 黑色字体 |
31 | 红色字体 |
32 | 绿色字体 |
33 | 棕色字体 |
34 | 蓝色字体 |
35 | 品红字体 |
36 | 孔雀蓝字体 |
37 | 白色字体 |
38 | 打开下划线,设置默认字体颜色 |
39 | 关闭下划线,设置默认字体颜色 |
40 | 黑色背景 |
41 | 红色背景 |
42 | 绿色背景 |
43 | 棕色背景 |
44 | 蓝色背景 |
45 | 品红背景 |
46 | 孔雀蓝背景 |
47 | 白色背景 |
49 | 设置默认背景色 |
四、官方说明
linux系统下输入:
man console_codes
可查看详细说明。
五、测试程序
#include <stdio.h>
int main(int argc, char const *argv[])
{
for (int i = 0; i < 50; ++i)
{
printf("\033[%dmHello wold!(%d)\033[0m\n", i, i);
}
return 0;
}