前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >好玩!C语言打印彩色字符,还能闪烁!

好玩!C语言打印彩色字符,还能闪烁!

作者头像
Mculover666
发布2020-07-16 14:29:55
2.1K0
发布2020-07-16 14:29:55
举报
文章被收录于专栏:TencentOS-tiny

1. ANSI escape code

最近在研究日志打印组件easylogger,玩转各种彩色日志打印不亦乐乎,好奇心越来越重,遂深入研究,发现了一个非常神奇的东西:ANSI escape code!

escape sequence code 全称叫做 escape sequence code,即 Escape 序列屏幕控制码,其实就是一些特殊的字符,将这些字符加入到printf打印的内容中,即可轻松实现在终端软件中以各种颜色、各种背景色显示内容,还可以高亮、加粗、闪烁,非常好玩!

2. 序列码格式

一串escape code的内容如下:

  • 特殊字符\033 :通知终端切换到escape模式;
  • 起始字符[:CSI内容的开始;
  • CSI内容字符(见下表);
  • CSI结束字符m: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

恢复光标位置

?25l

隐藏光标

?25h

显示光标

3. 示例

blabla一大堆,没法理解,接下来用实例说话,首先准备一份已经重定向printf到串口的工程,保证printf可以正常使用即可,并且使用终端软件查看串口输出(eg. Mobaxterm)。

① 打印没有背景色,字体颜色为绿色,字体正常的字符:

代码语言:javascript
复制
printf("\033[32mHelloWorld\r\n");

编译下载,即可看到效果:

② 及时取消属性

设置属性之后,该属性在终端中一直存在,必须要及时取消,比如在刚刚的printf之后,继续正常打印,不加特殊字符,依然会打印绿色字符:

代码语言:javascript
复制
printf("\033[32mHelloWorld\r\n");
printf("HelloWorld 2\r\n");
printf("HelloWorld 3\r\n");

所以要在使用完毕后及时取消所有属性设置,如下:

代码语言:javascript
复制
printf("\033[32mHelloWorld\033[0m\r\n");
printf("HelloWorld 2\r\n");
printf("HelloWorld 3\r\n");

③ 多个特殊字符一起设置

比如这里我同时设置打印颜色为绿色,字体在终端闪烁:

代码语言:javascript
复制
printf("\033[32;5mHelloWorld\033[0m\r\n");

怎么样,在终端打印各种好玩的字符是不是非常简单~自己上手玩玩吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. ANSI escape code
  • 2. 序列码格式
  • 3. 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档