1. ANSI escape code
最近在研究日志打印组件easylogger,玩转各种彩色日志打印不亦乐乎,好奇心越来越重,遂深入研究,发现了一个非常神奇的东西:ANSI escape code!
escape sequence code 全称叫做 escape sequence code,即 Escape 序列屏幕控制码,其实就是一些特殊的字符,将这些字符加入到printf打印的内容中,即可轻松实现在终端软件中以各种颜色、各种背景色显示内容,还可以高亮、加粗、闪烁,非常好玩!
2. 序列码格式
一串escape code的内容如下:
- 特殊字符 : 通知终端切换到escape模式;
- 起始字符:CSI内容的开始;
- CSI内容字符(见下表);
- CSI结束字符:CSI内容的结束;
其中,CSI模式全称Command Sequence Introduction,当终端软件处于CSI模式时,终端软件读取之后的ASCII码作为CSI内容,直到读入CSI结束字符,代表不同字符的ASCII字符之间用分 隔开。
代表背景颜色的特殊ASCII字符:
字符 | 颜色 |
---|---|
40 | 黑色 |
41 | 红色 |
42 | 绿色 |
43 | 黄色 |
44 | 蓝色 |
45 | 紫色 |
46 | 深绿 |
47 | 白色 |
代表字体颜色的特殊字符:
字符 | 颜色 |
---|---|
30 | 黑色 |
31 | 红色 |
32 | 绿色 |
33 | 黄色 |
34 | 蓝色 |
35 | 紫色 |
36 | 深绿 |
37 | 白色 |
其它一些屏幕控制ASCII字符:
字符 | 动作 |
---|---|
0 | 关闭所有属性 |
1 | 设置高亮度 |
4 | 下划线 |
5 | 闪烁 |
7 | 反显 |
8 | 消隐 |
最后还有一些控制终端光标的字符:
字符 | 动作 |
---|---|
nA | 光标上移n行 |
nB | 光标下移n行 |
nC | 光标右移n行 |
nD | 光标左移n行 |
y; xH | 设置光标位置 |
2J | 清屏 |
K | 清除从光标到行尾的内容 |
s | 保存光标位置 |
u | 恢复光标位置 |
l | 隐藏光标 |
h | 显示光标 |
3. 示例
blabla一大堆,没法理解,接下来用实例说话,首先准备一份已经重定向printf到串口的工程,保证printf可以正常使用即可,并且使用终端软件查看串口输出(eg. Mobaxterm)。
① 打印没有背景色,字体颜色为绿色,字体正常的字符:
编译下载,即可看到效果:
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115938 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!