-
【Linux】C/C++/Shell 改变终端程序输出的字的颜色
2019-10-31 09:43:52之前在写shell脚本的时候,尝试了改变终端程序中输出的字的颜色,大致格式如下: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033[0m" 其中41的位置代表底色, 36的...之前在写shell脚本的时候,尝试了改变终端程序中输出的字的颜色,大致格式如下:
echo "\033[字背景颜色;字体颜色m字符串\033[0m"
例如:
echo "\033[41;36m something here \033[0m"
其中41的位置代表底色, 36的位置是代表字的颜色。
今天发现C/C++程序中改变终端程序输出的字的颜色的方法和Shell脚本中的基本类似,现在来总结一下。
在C中只需要用
printf
函数代替上边的echo -e
就OK了。参见下例:#include int main() { printf("\033[31mThis is RED.\n\033[0m"); return 0; }
31m代表字体为红色,0m代表关闭所有属性。
简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。
常用的ANSI控制码如下(有些不支持):
\033[0m 关闭所有属性 \033[1m 高亮 \033[2m 亮度减半 \033[3m 斜体 \033[4m 下划线 \033[5m 闪烁 \033[6m 快闪 \033[7m 反显 \033[8m 消隐 \033[9m 中间一道横线 10-19 关于字体的 21-29 基本与1-9正好相反 30-37 设置前景色 40-47 设置背景色 # 字颜色:30--37 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 38 打开下划线,设置默认前景色 39 关闭下划线,设置默认前景色 # 字背景颜色范围:40--49 40 黑色背景 41 红色背景 42 绿色背景 43 棕色背景 44 蓝色背景 45 品红背景 46 孔雀蓝背景 47 白色背景 48 不知道什么东西 49 设置默认背景色 50-89 没用 90-109 又是设置前景背景的,比之前的颜色浅 \033[nA 光标上移n行 \033[nB 光标下移n行 \033[nC 光标右移n行 \033[nD 光标左移n行 \033[y;xH设置光标位置 \033[2J 清屏 \033[K 清除从光标到行尾的内容 \033[s 保存光标位置 \033[u 恢复光标位置 \033[?25l 隐藏光标 \033[?25h 显示光标
建议
可以在程序头部定义一些宏变量,这样程序看起来更简洁。
如:发生错误的时候,错误信息显示红色;发送警告的时候,警告信息显示黄色。#define WARN_MSG_V(msg, ...) \ printf("\033[33m" msg "\n\033[0m", ##__VA_ARGS__) #define ERR_MSG_V(msg, ...) \ printf("\033[31m" msg "\n\033[0m", ##__VA_ARGS__)
当然,也可以加上这些错误/警告发送在哪个函数,哪一行:
#define ERR_MSG_V(msg, ...) \ printf("** ERROR: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__) #define INFO_MSG_V(msg, ...) \ printf("** INFO: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__) #define WARN_MSG_V(msg, ...) \ printf("** WARN: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)
封装
shell
NONE_COLOR="\033[0m" BLACK="\033[0;30m" DARK_GRAY="\033[1;30m" RED="\033[0;31m" LIGHT_RED="\033[1;31m" GREEN="\033[0;32m" LIGHT_GREEN="\033[1;32m" BROWN="\033[0;33m" YELLOW="\033[1;33m" BLUE="\033[0;34m" LIGHT_BLUE="\033[1;34m" PURPLE="\033[0;35m" LIGHT_PURPLE="\033[1;35m" CYAN="\033[0;36m" LIGHT_CYAN="\033[1;36m" LIGHT_GRAY="\033[0;37m" WHITE="\033[1;37m" echo -e "${LIGHT_GREEN} test ${NONE_COLOR}"
c/c++头文件
// common.h #define NONE_COLOR "\033[0m" #define BLACK "\033[0;30m" #define DARK_GRAY "\033[1;30m" #define RED "\033[0;31m" #define LIGHT_RED "\033[1;31m" #define GREEN "\033[0;32m" #define LIGHT_GREEN "\033[1;32m" #define BROWN "\033[0;33m" #define YELLOW "\033[1;33m" #define BLUE "\033[0;34m" #define LIGHT_BLUE "\033[1;34m" #define PURPLE "\033[0;35m" #define LIGHT_PURPLE "\033[1;35m" #define CYAN "\033[0;36m" #define LIGHT_CYAN "\033[1;36m" #define LIGHT_GRAY "\033[0;37m" #define WHITE "\033[1;37m" #define UNUSED(a) ((void)(a)) #define ERR_MSG_V(msg, ...) \ printf(LIGHT_RED"** ERROR: " msg NONE_COLOR"\n", ##__VA_ARGS__) #define INFO_MSG_V(msg, ...) \ printf(LIGHT_GREEN"** INFO: " msg NONE_COLOR"\n", ##__VA_ARGS__) #define WARN_MSG_V(msg, ...) \ printf(YELLOW"** WARN: " msg NONE_COLOR"\n", ##__VA_ARGS__)
-
C/C++改变终端输出字体的颜色(Linux)
2020-09-02 17:43:52C/C++改变终端输出字体的颜色(Linux)例:常用的ANSI控制码如下(有些不支持): 简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。 例: #include int main() { printf("\033[31...C/C++改变终端输出字体的颜色(Linux)
简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。
例:
#include int main() { printf("\033[31mThis is RED.\n\033[0m"); // 31m代表字体为红色,0m代表关闭所有属性。 return 0; }
常用的ANSI控制码如下(有些不支持):
关闭所有属性:\033[0m
高亮:\033[1m
亮度减半:\033[2m
斜体:\033[3m
下划线:\033[4m
闪烁:\033[5m
快闪:\033[6m
反显:\033[7m
消隐:\033[8m
中间一道横线:\033[9m
关于字体的:10-19
基本与1-9正好相反:21-29
设置前景色:30-37
设置背景色:40-47
黑:30
红:31
绿:32
黄:33
蓝色:34
紫色:35
深绿:36
白色:37
38 打开下划线,设置默认前景色
39 关闭下划线,设置默认前景色
40 黑色背景
41 红色背景
42 绿色背景
43 棕色背景
44 蓝色背景
45 品红背景
46 孔雀蓝背景
47 白色背景
48 不知道什么东西
49 设置默认背景色
50-89 没用
90-109 又是设置前景背景的,比之前的颜色浅
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标 -
Linux设置终端输出字体颜色
2019-09-29 01:09:31Linux设置终端输出字体颜色 0x01 终端配色方法简介 使用\033[01;04;32;41m之类的配色方案在需要输出显示的文本之前,可以改变应用程序输出文本的颜色或者背景颜色。 #include <stdio.h> int main() { printf...Linux设置终端输出字体颜色
0x01 终端配色方法简介
使用\033[01;04;32;41m之类的配色方案在需要输出显示的文本之前,可以改变应用程序输出文本的颜色或者背景颜色。
#include <stdio.h> int main() { printf("\033[01;34m Hello World\033[0m\n"); return 0; }
上面的01表示加粗,34表示是蓝色,后面\033[0m表示恢复所有的属性为原来的默认值。更多关于颜色的参考,
http://www.pixelbeat.org/docs/terminal_colours/有非常详细的叙述。也可以把上述的\033字符用\e或者\x1b替换。可以采用多种配色方案,比如上面提到的\033[01;04;32;41m,04表示下划线,32表示前景色是绿色,然后41表示背景色是红色。
由于使用的是Linux系统为终端提供的配色方案,所以该程序不具备移植性。可以看到,该程序在Windows会打印一些奇怪的符号。
字颜色: 30–39
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色
字背景颜色范围: 40–49
40: 黑
41: 红
42: 绿
43: 黄
44: 蓝
45: 紫
46: 深绿
47: 白色
ANSI控制码:
QUOTE:
/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 显示光标0x02 简单的终端颜色改变程序
#include <unistd.h> #include <iostream> #include <stdarg.h> #include <cstdio> #include <string.h> #include <stdlib.h> enum Color { BLACK = 30, RED = 31, GREEN = 32, BROWN = 33, BLUE = 34, MAGENTA = 35, CYAN = 36, GREY = 37, LRED = 41, LGREEN = 42, YELLOW = 43, LBLUE = 44, LMAGENTA = 45, LCYAN = 46, WHITE = 47 }; void set_color(int fd, Color color) { char buffer[32]; snprintf(buffer, sizeof(buffer), "\x1b[%d%sm", color >= LRED ? (color - 10) : color, color >= LRED ? ";1" : "" ); write(fd, buffer, strlen(buffer)); } void reset_color(int fd) { const char* s = "\x1b[0m"; write(fd, s, strlen(s)); } int main(void) { int color; int count = 0; std::cout<<"please input color eum(30 - 47):\t"; while(1) { std::cout << "this is " << count++ << " times..."<<std::endl; std::cin>>color; if (color >= 30 && color <38 || color >= 40 && color < 48) { set_color(STDOUT_FILENO, (Color)color); std::cout << "set color success...."<<std::endl; } else if(-1 == color) { reset_color(STDOUT_FILENO); std::cout << "reset_color success...."<<std::endl; break; } else { std::cout<<"Warning: please input color range [30, 37] [40, 47]"<<std::endl; } } std::cout<<"bye~bye ...."<<std::endl; exit(EXIT_SUCCESS); }
演示:
-
C++改变终端输出的字符颜色(Linux和Windows)
2019-03-05 13:14:27此方法适用于DOS Linux; mac和unix没测试 printf(&quot;\033[31mThis is RED.\n\033[0m&quot;); cout&amp;lt;&amp;lt;&quot;\033[33mthis is Yellow.\n\033[0m&...Windows命令行字符改色方法
推荐大家使用一个库来控制彩色字符输出
https://gitee.com/whatitis/ColorfulConsoleIO_wsystem(L"color 0a");
设置默认的控制台前景和背景颜色。
COLOR [attr]
attr 指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色
此方法适用于Linux;
mac和unix没测试
printf("\033[31mThis is RED.\n\033[0m"); cout<<"\033[33mthis is Yellow.\n\033[0m"<<endl; wcout<<L"\033[33m;47mthis is ?.\n\033[0m"<<endl; cout<<"\033[33;47mthis is ?.\n\033[0m"<<endl;
简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。
31m代表字体为红色,0m代表关闭所有属性。
常用的ANSI控制码如下(有些不支持):
\033[0m 关闭所有属性
\033[1m 高亮
\033[2m 亮度减半
\033[3m 斜体
\033[4m 下划线
\033[5m 闪烁
\033[6m 快闪
\033[7m 反显
\033[8m 消隐
\033[9m 中间一道横线
10-19 关于字体的
21-29 基本与1-9正好相反
30-37 设置前景色
40-47 设置背景色
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
38 打开下划线,设置默认前景色
39 关闭下划线,设置默认前景色
40 黑色背景
41 红色背景
42 绿色背景
43 棕色背景
44 蓝色背景
45 品红背景
46 孔雀蓝背景
47 白色背景
48 不知道什么东西
49 设置默认背景色
50-89 没用
90-109 又是设置前景背景的,比之前的颜色浅
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标 -
linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式
2020-12-20 23:34:21前言在Linux终端下调试程序时,有时需要输出大量信息...本文简要介绍C语言中通过printf改变终端输出的颜色和显示方式。文中涉及的代码运行环境如下:正文转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为... -
Linux中将终端的打印结果输出到文本文件中
2018-10-19 14:42:33代表要追加要输出的文件,不改变原文件的内容 例如:利用符号">" 打印当前的路径,并将结果记录到 pwd.txt文件中。 如果存在pwd文件,将重写该文件, 利用符号 ">>&... -
Linux终端程序用c语言实现改变输出的字的颜色
2018-05-30 22:51:00颜色代码: 格式: echo "\033[字背景颜色;...其中41的位置代表底色, 36的位置是代表字的颜色 那些ascii code 是对颜色调用的始末. \033[ ; m …… \033[0m 字背景颜色范围:40---... -
Linux终端程序用c语言实现改变输出的字的颜色 (转)
2013-10-21 21:39:14Linux终端程序用c语言实现改变输出的字的颜色 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033[0m" 其中41的位置代表底色, 36的位置是... -
Linux:C应用程序终端输出字体颜色的改变
2011-09-17 21:15:34使用\033[01;04;32;41m之类的配色方案在需要输出显示的文本之前, ...可以改变应用程序输出文本的颜色或者背景颜色。 color_hello.c #include int main() { printf("\033[01;34m Hello World\033 -
通过printf设置Linux终端输出的颜色和显示方式
2018-11-23 17:14:05前言 在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体的颜色和显示方式,可使... 本文简要介绍C语言中通过printf改变终端输出的颜色和显示方式。文中涉及的代码运行环境如下: 正文 ...
-
JS 手写 快排
-
JS 手写 深拷贝
-
EaUS Video Editor(视频剪辑软件)官方中文版V1.6.8.53
-
2005-2020信息系统项目管理师历年真题(含上午题、案例分析、论文)试题和答案.rar
-
vue3从0到1-超详细
-
firewalld permanent参数
-
爬虫示例
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
马士兵 mybatis学习笔记
-
MySQL 高可用工具 DRBD 实战部署详解
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
Docker从入门到精通
-
大学生活总结和日后规划
-
DVD数码相册大师.rar
-
NodeMCU-ESP32开发实例-WiFi连接设置静态IP
-
linux基础入门和项目实战部署系列课程
-
鸿蒙系统Harmonyos源码架构分析-第1期第2课
-
MySQL 触发器
-
MySQL Router 实现高可用、负载均衡、读写分离
-
python课件.rar