Linux下printf输出字符串的颜色
基本打印格式:
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
printf("\033[41;32m字体背景是红色,字是绿色\033[0m\n");
41是字背景颜色, 32是字体的颜色, 字体背景是红色,字是绿色是要输出的字符串. 后面的\033 ...\033[0m是配对的为控制码。
先来说一下颜色和背景的代码
颜色代码:
QUOTE:
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
注意到总体范围是从30到49,在printf("\033[41;32m字体背景是红色,字是绿色\033[0m\n");中\033[41;32m是可以单独只指定背景颜色或者字体颜色的,这样另外的部分就是默认状态如\033[32m 表示字体是绿色背景默认而\033[41m 表示背景为红色字体默认。
在“字体背景是红色,字是绿色”这一部分可以是要输出的字符串,也可以是格式控制串包含格式控制符如printf("\033[41;32m%2d\033[0m\n",a);则会输出int型的a,背景占2字符为红色,字体为绿色。
我们再说一下控制码,不同的控制码会产生不同的效果,这些属性可以写在后面,也可以加载前面如printf("\033[0m\033[41;32m%2d\n",a);也是可以的,不同在于是先打印再添加属性还是先添加属性再打印还是先打印再添加属性。当然一次也可以添加多个属性,总体原则是格式为:\33[ + 属性代码 随你喜好开心就好
ANSI控制码:
QUOTE:
\033[0m 关闭所有属性 这个关闭的属性是指的之前通过ANSI控制码获得的属性,这些属性得后遇到\033[0m会关闭
\033[1m 设置高亮度 (光标过出均变为背景色)
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
在说一下,其实这些属性信息中的相关数字也是可以通过变量的传入传进去的例如:
for (x = p_x + 36, y = p_y + 1; y <= 25; y++)
printf("\33[%d;%dH\33[41m==\33[0m", y, x);
//设置颜色为紫色 color pink #define EXAMPLE_TRACE_PINK(...) \ do { \ HAL_Printf("\033[1;35m%s.%d: ", __func__, __LINE__); \ HAL_Printf(__VA_ARGS__); \ HAL_Printf("\033[0m\r\n"); \ } while (0) //设置颜色为绿色color green #define EXAMPLE_TRACE(...) \ do { \ HAL_Printf("\033[1;32;320m%s.%d: ", __func__, __LINE__); \ HAL_Printf(__VA_ARGS__); \ HAL_Printf("\033[0m\r\n"); \ } while (0)
在Makefile中采用以下方式调试log
$(shell echo "\033[1;32m============================the value of LOCAL_PATH is$(LOCAL_SRC_FILES)\033[0m" >&2)