一、Linux下控制台文字上色的方法
Linux下控制台颜色是通过添加专用数字来选择的。这些数字夹在 "\e["和 "m"之间。如果指定一个以上的数字,则用分号将它们分开。
举几个例子:
(1)第一个数字(31)为前景颜色(红色);第二个数字为(42)背景颜色(绿色)
echo -e "\e[31;42m"
(2)使用"\e[0m"序列将颜色重新设置为正常值
echo -e "\e[0m" 或 echo -e "\033[0m"
(3)颜色对应关系如下所示:
\e[30m – \e[37m 设置前景色(字体颜色)
echo -e “\e[30m” 灰色
echo -e “\e[31m” 红色
echo -e “\e[32m” 绿色
echo -e “\e[33m” 黄色
echo -e “\e[34m” 蓝色
echo -e “\e[35m” 紫色
echo -e “\e[36m” 淡蓝色
echo -e “\e[37m” 白色
\e[40m – \e[47m 设置背景色
echo -e “\e[40m” 灰色
echo -e “\e[41m” 红色
echo -e “\e[42m” 绿色
echo -e “\e[43m” 黄色
echo -e “\e[44m” 蓝色
echo -e “\e[45m” 紫色
echo -e “\e[46m” 淡蓝色
echo -e “\e[47m” 白色
具体到编程中,printf() 颜色设置示例代码如下所示。
printf("\e[31m\e[42m Hello World. \e[0m \n"); // 红色字体,绿色背景
二、Windows下控制台文字上色的方法
Windows下控制台颜色是通过SetConsoleTextAttribute()函数完成的。SetConsoleTextAttribute()函数的原型如下所示。
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
其中2个参数的含义如下所示:
- hConsoleOutput:指向控制台的句柄。
- wAttributes:文本属性。
hConsoleOutput可以选择以下3种句柄: - STD_INPUT_HANDLE: 标准输入的句柄
- STD_OUTPUT_HANDLE: 标准输出的句柄
- STD_ERROR_HANDLE: 标准错误的句柄
wAttributes可以控制前景色和背景色:
- FOREGROUND_BLUE: 字体颜色:蓝
- FOREGROUND_GREEN: 字体颜色:绿
- FOREGROUND_RED: 字体颜色:红
- FOREGROUND_INTENSITY: 前景色高亮显示
- BACKGROUND_BLUE: 背景颜色:蓝
- BACKGROUND_GREEN: 背景颜色:绿
- BACKGROUND_RED: 背景颜色:红
- BACKGROUND_INTENSITY 背景色高亮显示
demo如下:
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
printf("red\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
printf("green\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
printf("blue\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_GREEN);
printf("red+green=yellow\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_BLUE);
printf("red+blue=purple\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_BLUE);
printf("green+blue=cyan\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|BACKGROUND_GREEN);
printf("Add background\n");
return 0;
}
运行结果如下: