3.5 KiB
3.5 KiB
作者:粤嵌-李林峰
终端显示字体和颜色的方法
在终端中使用printf输出时,可以通过ANSI转义码来控制文本的颜色、背景色和字体样式。下面详细介绍各种控制方法。
基本格式
ANSI转义码的基本格式为:
printf("\033[属性值;...;属性值 m 文本内容 \033[0m");
其中:
-
\033 是ESC字符的八进制表示(也可以用\x1b十六进制表示)
-
[ 开始控制序列
-
属性值 是控制代码,多个属性用分号分隔
-
m 结束控制序列
-
\033[0m 重置所有属性
字体样式控制
| 代码 | 效果 |
|---|---|
| 0 | 重置所有属性 |
| 1 | 加粗/高亮 |
| 2 | 暗淡/弱化 |
| 3 | 斜体 |
| 4 | 下划线 |
| 5 | 闪烁 |
| 7 | 反显(反色) |
| 8 | 隐藏 |
| 9 | 删除线 |
示例:
printf("\033[1m加粗文本\033[0m\n");
printf("\033[3m斜体文本\033[0m\n");
printf("\033[4m下划线文本\033[0m\n");
前景色(文字颜色)
| 代码 | 颜色 |
|---|---|
| 30 | 黑色 |
| 31 | 红色 |
| 32 | 绿色 |
| 33 | 黄色 |
| 34 | 蓝色 |
| 35 | 洋红 |
| 36 | 青色 |
| 37 | 白色 |
| 90 | 亮黑 |
| 91 | 亮红 |
| 92 | 亮绿 |
| 93 | 亮黄 |
| 94 | 亮蓝 |
| 95 | 亮洋红 |
| 96 | 亮青 |
| 97 | 亮白 |
示例:
printf("\033[31m红色文字\033[0m\n");
printf("\033[92m亮绿色文字\033[0m\n");
背景色
| 代码 | 颜色 |
|---|---|
| 40 | 黑色 |
| 41 | 红色 |
| 42 | 绿色 |
| 43 | 黄色 |
| 44 | 蓝色 |
| 45 | 洋红 |
| 46 | 青色 |
| 47 | 白色 |
| 100 | 亮黑 |
| 101 | 亮红 |
| 102 | 亮绿 |
| 103 | 亮黄 |
| 104 | 亮蓝 |
| 105 | 亮洋红 |
| 106 | 亮青 |
| 107 | 亮白 |
示例:
printf("\033[41m红色背景\033[0m\n");
printf("\033[104m亮蓝色背景\033[0m\n");
组合使用
可以同时设置多个属性,用分号分隔:
printf("\033[1;31;42m加粗红色文字绿色背景\033[0m\n");
printf("\033[4;93;44m下划线亮黄色文字蓝色背景\033[0m\n");
256色模式
对于支持256色的终端,可以使用更丰富的颜色:
前景色:
printf("\033[38;5;颜色编号m文本\033[0m");
背景色:
printf("\033[48;5;颜色编号m文本\033[0m");
颜色编号范围0-255,其中:
-
0-15:标准16色
-
16-231:6×6×6 RGB立方
-
232-255:灰度
示例:
printf("\033[38;5;196m红色文字\033[0m\n");
printf("\033[48;5;226m黄色背景\033[0m\n");
RGB真彩色模式
最新终端支持RGB真彩色:
前景色:
printf("\033[38;2;R;G;Bm文本\033[0m");
背景色:
printf("\033[48;2;R;G;Bm文本\033[0m");
其中R,G,B为0-255的数值。
示例:
printf("\033[38;2;255;100;100m自定义颜色文字\033[0m\n");
printf("\033[48;2;100;200;255m自定义背景色\033[0m\n");
注意事项
-
不是所有终端都支持所有颜色和效果
-
使用后记得用\033[0m重置属性
-
某些效果(如闪烁)可能被终端禁用
-
Windows CMD默认不支持,需要启用ANSI支持或使用其他终端
实用技巧
可以定义宏简化使用:
#define RED "\033[31m"
#define GREEN "\033[32m"
#define RESET "\033[0m"
printf(RED "错误: " RESET "发生错误\n");
或者定义函数:
void print_color(const char* color, const char* text)
{
printf("%s%s" RESET, color, text);
}
print_color("\033[1;34m", "重要信息");
参考文件: