原创 设置超级终端中字符的颜色

2009-4-16 21:35 7067 8 8 分类: MCU/ 嵌入式

在 ANSI 兼容终端(例如 xterm、rxvt、konsole 等)里, 可以用彩色显示文本而不仅仅是黑白。

下面的语句就输出高亮的黑色背景的绿色字。
printf("\033[1;40;32m%s\033[0m", Hello,world!\n);
\033 声明了转义序列的开始,然后是 [ 开始定义颜色。后面的 1 定义了高亮显示字符。然后是背景颜色,这里面是40,表示黑色背景。接着是前景颜色,这里面是32,表示绿色。我们用 \033[0m 关闭转义序列, \033[0m 是终端默认颜色。
通过上面的介绍,就知道了如何输出彩色字符了。

下面是对于彩色字符颜色的一些定义:
前景          背景              颜色
---------------------------------------
30             40              黑色
31             41              紅色
32             42              綠色
33             43              黃色
34             44              藍色
35             45              紫紅色
36             46              青藍色
37             47              白色



    代码              意义
-------------------------
0             终端默认设置
1             高亮显示
4             使用下划线
5             闪烁
7             反白显示
8             不可见



通过串口收发或显示字符时,我们使用的通常是字符的ASCII码。对于非控制字符,也即键入命令时我们可能使用到的命令字符,在控制台中我们使用了ASCII码值从0x20~0x7e之间的字符。对于控制字符,在常用字符ASCII码对照表中我们可以找到Enter键、Backspace(退格)键以及ESC键的ASCII码,但是却没有上下左右方向键以及Home、End键对应的ASCII码,通过对键盘输入字符的串口收发测试发现,如果在测试时按下了方向键则串口在每次按键后会连续发送出3字节数据,前两字节所有方向键的数据相同,分别是0x1b,0x5b,第3字节对应不同的按键,上下右左方向键分别对应的值为:0x41、0x42、0x43、0x44,Home和End键对应的值为0x48和0x4b。故要检测键盘是否键入了方向键,需要向串口连续读取三字节的数据,同理,要控制光标向左、向右移动或Home、End也需要连续一次向串口发送3字节数据。


 


 


send_char_com(0x1B);    单字节发
send_string_com("[34m");  


在 ANSI 兼容终端(例如 xterm、rxvt、konsole 等)里, 可以用彩色显示文本而不仅仅是黑白。但是我们自己编写的程序能否输出彩色的字符呢?当然答案是肯定的。下面的语句就输出高亮的黑色背景的绿色字。
printf("\033[1;40;32m%s\033[0m",” Hello,NSFocus\n”);
\033 声明了转义序列的开始,然后是 [ 开始定义颜色。后面的 1 定义了高亮显示字符。然后是背景颜色,这里面是40,表示黑色背景。接着是前景颜色,这里面是32,表示绿色。我们用 \033[0m 关闭转义序列, \033[0m 是终端默认颜色。
    通过上面的介绍,就知道了如何输出彩色字符了。因此,我就不再多说了。下面是对于彩色字符颜色的一些定义:
    前景            背景              颜色
    ---------------------------------------
    30                40              黑色
    31                41              紅色
    32                42              綠色
    33                43              黃色
    34                44              藍色
    35                45              紫紅色
    36                46              青藍色
    37                47              白色

    代码              意义
    -------------------------
    0                终端默认设置
    1                高亮显示
    4                使用下划线
    5                闪烁
    7                反白显示
    8                不可见

下面给出了一个C语言的示例:

///////////////////////////////////////////////////////////////////////////////
//filename:tracelog.c
#include <stdio.h>

int main(int argc,char **argv)
{
    unsigned char attr[]={0,1,4,5,7,8};
    unsigned char fore[]={30,31,32,33,34,35,36,37};
    unsigned char back[]={40,41,42,43,44,45,46,47};
    int adx,fdx,bdx;

    for(bdx=0;bdx<sizeof(back);bdx++)
    {
        for(fdx=0;fdx<sizeof(fore);fdx++)
        {
            for(adx=0;adx<sizeof(attr);adx++)
            {
                printf("\033[%d;%d;%dmhello,NSFocus!!!\033[0m",
                    attr[adx],fore[fdx],back[bdx]);
                printf("<==attr=%d,fore=%d,back=%d\n",
                    attr[adx],fore[fdx],back[bdx]);
            }
        }
        printf("\n");
    }
}


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=637294


黑色  红色  绿色 棕色 蓝色 紫色 
       浅蓝色 灰色


       请在回复的时候把上面的颜色字代码复制到写字板上!


     第一篇:如何让自己的昵称动起来,字变大?
     进入[资料配置],在[修改昵称]中,在你的昵称前加上  
     <marquee><h1>, <marquee>是让昵称动起来,<h1>、<h2>、  
     <h3>、<h4>、<h5>、<h6>是让字大起来。   


     第二篇:如何做彩色签名?
     它是采用几个字符串来作为颜色控制符的,只要在你想要改变颜  
     色的字符前加上一串颜色控制符,你就可以得到一段彩色文  
     字了。网易共提供了9个颜色控制字符串,你最多可以在网  
     易签名档里设置8种颜色,它们分别是:
     [30m 黑色 [31m 红色 [32m 绿色 [33m 棕色   
     [34m 蓝色 [35m 紫色 [36m 浅蓝色 [37m 灰色   
     [38m 灰色      
     如果你想让“我是一名新手,请各位大侠多多指教”这名话  
     变成红色的话,你只要在这句话的前面加上“■[31m”这个  
     字符串就行了,也就是说,只要你在网易签名档中加入  
     “■[31m我是一名新手,请各位大侠多多指教”这段话,   
     在发贴子时指定用这个签名档,别人就可在你的贴子下面看  
     到一句红色的“我是一名新手,请各位大侠多多指教” 的  
     签名了。就这么简单!不过你不要高兴得太早了,你一定  
     看到那个黑色的方块块了,那是个什么字符,又是怎么得   
     来的呢?请看下文。   
     这个字符其实就是ESC键的ASCII码,在一般情况下显示  
     为空格,而不是上面的黑色方块块,但千万要注意不是按空  
     格键得来的空格!它在一般的文字处理工具中是无法通过键  
     盘输入得到的!呵呵!你没被吓着吧?得到它是有点困难,  
     不过不要急,还是有办法的。既然它无法在一般文字处理工  
     具中通过键盘输入得到,那么我们只有动用DEBUG或PCTOOL  
     工具了。你可以先用记事本(NotePad)建立一个含有一个  
     空格(16进制代码为0x20)的文本文件(如“ [34m”),  
     再用上面提到的两个工具把这个文件中的空格字符改为  
     ESC键字符(即"0x20"改为“0x1B”),再保存文件,这样  
     你的这个文本文件中那个普通空格就变为ESC键这个特殊空  
     格了。打开你的签名,将此文本文件中的“  [34m”复制,  
     粘贴在你想变色的文字前即可,在你的签名中不同位置粘  
     贴不同的内容(如:“ [33m"),你将会得到五颜六色的  
     签名。  
         为什么要用这个特殊的字符来控制颜色呢?这是因为  
     早期的终端仿真程序就是用0x1B(ESC字符)这个字符作为  
     “换码序列”,ESC字符后面的数字通常用于控制终端光  
     标的位置或者字符的颜色。  
     可是我既不会用DEBUG,也不会用PCTOOL,怎么办?  
     是不是没的办法了呢?不是!还是有捷径可走的,呵呵!  
     什么捷径?那当然是借啰,向别人借!虽然你不能用键?
     盘输入这个字符,但它可在文本文件中保存,也可在  
     WINDOWS的剪贴板,电子邮件,网易的消息发送中传递,  
     所以你尽可以通过这些途径向你的那些用上了彩色签名  
     的朋友去借,我相信他(她)绝对不会因为一个字符而  
     跟你过不去的。呵呵!祝你好运!


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条