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