精华内容
下载资源
问答
  • 之前在写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)例:常用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设置终端输出字体颜色 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);
    }
    

    演示:
    Demo输出

    展开全文
  • 此方法适用于DOS Linux; mac和unix没测试 printf(&amp;quot;\033[31mThis is RED.\n\033[0m&amp;quot;); cout&amp;amp;lt;&amp;amp;lt;&amp;quot;\033[33mthis is Yellow.\n\033[0m&amp;...

    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终端下调试程序时,有时需要输出大量信息...本文简要介绍C语言中通过printf改变终端输出的颜色和显示方式。文中涉及代码运行环境如下:正文转义序列以控制字符'ESC'开头。该字符ASCII码十进制表示为...
  • 代表要追加要输出的文件,不改变原文件内容 例如:利用符号"&gt;" 打印当前路径,并将结果记录到 pwd.txt文件中。 如果存在pwd文件,将重写该文件, 利用符号 "&gt;&gt;&...
  • 颜色代码: 格式: echo "\033[字背景颜色;...其中41位置代表底色, 36位置是代表字颜色 那些ascii code 是对颜色调用始末. \033[ ; m …… \033[0m 字背景颜色范围:40---...
  • Linux终端程序用c语言实现改变输出的颜色  格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033[0m"  其中41位置代表底色, 36位置是...
  • 使用\033[01;04;32;41m之类配色方案在需要输出显示文本之前, ...可以改变应用程序输出文本颜色或者背景颜色。 color_hello.c #include int main() { printf("\033[01;34m Hello World\033
  • 前言  在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体颜色和显示方式,可使... 本文简要介绍C语言中通过printf改变终端输出的颜色和显示方式。文中涉及代码运行环境如下:     正文 ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 202
精华内容 80
关键字:

linux改变终端的输出

linux 订阅