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

2009-4-16 21:35 5913 1 1 分类: 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的剪贴板,电子邮件,网易的消息发送中传递,  
     所以你尽可以通过这些途径向你的那些用上了彩色签名  
     的朋友去借,我相信他(她)绝对不会因为一个字符而  
     跟你过不去的。呵呵!祝你好运!


 


 

文章评论0条评论)

登录后参与讨论
相关推荐阅读
shougangshi_469315297 2011-08-16 16:10
template c++
http://www.codeguru.com/forum/archive/index.php/t-333284.htmlhttp://www.codeguru.com/forum/archive/i...
shougangshi_469315297 2011-07-06 20:55
Linux下的Source Insight+Ubuntu 10.04使用Wine安装Source I
Linux下的Source Insighthttp://rogerer.javaeye.com/blog/755346    在网上看到一朋友写了一篇推荐Linux下代码阅读工具Source ...
shougangshi_469315297 2011-07-05 18:28
转]atoi、atof、_itoa、_itow 函数使用
http://www.cnblogs.com/heaad/archive/2009/08/10/1542511.htmlatoi、atof、itoa、itow函数是windows平台下实现字符串与数值...
shougangshi_469315297 2011-07-05 18:25
【转】嵌入式经典面试题
嵌入式经典面试题(转)   C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面...
shougangshi_469315297 2011-07-05 16:13
U-boot中TFTP 解释
http://www.cnblogs.com/heaad/archive/2009/08/10/1542538.html一、      概述      U-boot中的TFTP用于发送较小的文件。下层...
shougangshi_469315297 2011-07-05 15:44
Linux驱动模块初始教程:一步一步,从helloworld到insmod->printk!!!
http://hi.baidu.com/ctgukuang/blog/item/5ee388924593c099a877a4ef.html【1】有必要查询下Linux内核# uname -r2.6.2...
广告
EE直播间
更多
我要评论
0
1
广告
关闭 热点推荐上一条 /7 下一条