自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何讓你的C程序打印的Log多一點色彩?

開發(fā) 前端
使用 ANSI 轉(zhuǎn)義碼來設(shè)置文本樣式和顏色可能會因為不同的終端軟件和操作系統(tǒng)而產(chǎn)生不同的效果。 同時,這種方式也只適用于在終端上輸出,如果需要在 GUI 程序中設(shè)置文本顏色等效果,則需要使用相應(yīng)的 GUI 庫提供的接口。

在平常的調(diào)試中,printf字體格式與顏色都是默認(rèn)一致的。 

如果可以根據(jù)log信息的重要程度,配以不同的顏色與格式,可以很方便的查找到要點。

1、printf字體顯示語法說明

printf(“\033[顯示方式;字體顏色;背景顏色m 字符串 \033[0m” );

圖片圖片

語法說明:

  • 第一個**\033[**表示轉(zhuǎn)義序列的開始,設(shè)置隨后的字體格式 轉(zhuǎn)義序列是以 ESC 開頭,用 \033 完成相同的工作(ESC 的 ASCII 碼用十進(jìn)制表示就是 27, = 用八進(jìn)制表示的 33)。
  • 顯示方式:0:默認(rèn)值  1:高亮 、22:非粗體、4:下劃線、24:非下劃線、5:閃爍、25:非閃爍、7:反顯、27:非反顯
  • 字體顏色30: 黑   31: 紅 32: 綠 33: 黃 34: 藍(lán) 35: 紫 36: 深綠 37: 白色
  • 背景顏色40: 黑 41: 紅 42: 綠 43: 黃 44: 藍(lán) 45: 紫 46: 深綠 47: 白色
  • 紅色  'm':表示轉(zhuǎn)義序列的結(jié)束
  • 結(jié)尾處的**\033[0m**是恢復(fù)默認(rèn)值。

其他ANSI控制碼:

/033[0m 關(guān)閉所有屬性
    /033[1m 設(shè)置高亮度
    /033[4m 下劃線
    /033[5m 閃爍
    /033[7m 反顯
    /033[8m 消隱
    /033[30m -- /033[37m 設(shè)置前景色
    /033[40m -- /033[47m 設(shè)置背景色
    /033[nA 光標(biāo)上移n行
    /033[nB 光標(biāo)下移n行
    /033[nC 光標(biāo)右移n行
    /033[nD 光標(biāo)左移n行
    /033[y;xH設(shè)置光標(biāo)位置
    /033[2J 清屏
    /033[K 清除從光標(biāo)到行尾的內(nèi)容
    /033[s 保存光標(biāo)位置
    /033[u 恢復(fù)光標(biāo)位置
    /033[?25l 隱藏光標(biāo)
    /033[?25h 顯示光標(biāo)

注意: 其中 顯示方式;字體顏色;背景顏色 可以任意組合,";"隔開即可。 使用 ANSI 轉(zhuǎn)義碼來設(shè)置文本樣式和顏色可能會因為不同的終端軟件和操作系統(tǒng)而產(chǎn)生不同的效果。 同時,這種方式也只適用于在終端上輸出,如果需要在 GUI 程序中設(shè)置文本顏色等效果,則需要使用相應(yīng)的 GUI 庫提供的接口。

2、舉例

printf("\033[1;31mThis text is in red and bold.\033[0m\n");
 printf("\033[0;31mThis text is in red and not bold.\033[0m\n");

其中,'1' 表示加粗或高亮,'31' 表示前景色為紅色,'\033[' 是轉(zhuǎn)義序列的開始,'m' 是轉(zhuǎn)義序列的結(jié)束,'\033[0m' 表示將屬性重置為默認(rèn)值。

運行結(jié)果:

圖片圖片

方式

printf("\033[0;36m****一口Linux*****【0;36m】\033[0m\r\n");
 printf("\033[1;36m****一口Linux*****【1;36m】\033[0m\r\n");
 printf("\033[4;36m****一口Linux*****【4;36m】\033[0m\r\n");
 printf("\033[5;36m****一口Linux*****【5;36m】\033[0m\r\n");
 printf("\033[7;36m****一口Linux*****【7;36m】\033[0m\r\n");
 printf("\033[8;36m****一口Linux*****【8;36m】\033[0m\r\n");
 printf("\033[22;36m****一口Linux*****【22;36m】\033[0m\r\n");
 printf("\033[24;36m****一口Linux*****【24;36m】\033[0m\r\n");
 printf("\033[25;36m****一口Linux*****【25;36m】\033[0m\r\n");
 printf("\033[27;36m****一口Linux*****【27;36m】\033[0m\r\n");

圖片圖片

色譜

測試代碼[僅打印字體顏色]

printf("\033[30m****一口Linux*****【30】\033[0m\r\n");
    printf("\033[31m****一口Linux*****【31】\033[0m\r\n");
    printf("\033[32m****一口Linux*****【32】\033[0m\r\n");
    printf("\033[33m****一口Linux*****【33】\033[0m\r\n");
    printf("\033[34m****一口Linux*****【34】\033[0m\r\n");
    printf("\033[35m****一口Linux*****【35】\033[0m\r\n"); 
    printf("\033[36m****一口Linux*****【36】\033[0m\r\n");
    printf("\033[37m****一口Linux*****【37】\033[0m\r\n"); 

    printf("\033[40m****一口Linux*****【40】\033[0m\r\n");
    printf("\033[41m****一口Linux*****【41】\033[0m\r\n");
    printf("\033[42m****一口Linux*****【42】\033[0m\r\n");
    printf("\033[43m****一口Linux*****【43】\033[0m\r\n");
    printf("\033[44m****一口Linux*****【44】\033[0m\r\n");
    printf("\033[45m****一口Linux*****【45】\033[0m\r\n"); 
    printf("\033[46m****一口Linux*****【46】\033[0m\r\n");
    printf("\033[47m****一口Linux*****【47】\033[0m\r\n");

圖片圖片

3、給打印信息封裝

為方便打印字符串為不同顏色,我們可以將一些常用的顏色定義成宏

#define HL_TWK_RED_YEL  "\033[1m\033[5;31;43m" //閃爍高亮紅字黃底
#define HL_RED_WRT      "\033[1;31;47m"   //高亮紅色白底

#define HL_RED          "\033[1;31m"    //高亮紅色
#define HL_GRN          "\033[1;32m"    //高亮綠色
#define HL_YEL          "\033[1;33m"    //高亮黃色
#define HL_DGRN          "\033[1;36m"    //高亮深綠

#define PF_CLR  "\033[0m"       //清除

將系統(tǒng)提供的printf函數(shù)做一個封裝:

#define myprintf(color, format, args...)        \
    do{           \  
            printf(color);             \
            printf(format, ##args);          \
            printf(PF_CLR);             \
    }while(0)

比如我們要打印字符串,顯示為高亮黃色

myprintf(HL_YEL,"%s\n","yikoulinux");

4.  美化程序的打印log

假設(shè)我們有如下格式的通信信令:

圖片圖片

調(diào)試通信協(xié)議,我們經(jīng)常需要將通信的信令以16進(jìn)制格式全部打印出來,這些數(shù)據(jù)看起來非常不直觀,

為方便查看log,將幾個最重要字段顯示出來。

比如msgType、len。

void dump_frm(char *title,UINT8 *data,int len)
{
 int i=0;
  
 myprintf(HL_YEL,"%s\n",title);
 for(i=0;i<len;i++)
 {
  if(i==0){
   myprintf(HL_RED,"%02x ",data[i]);  
  }else if(i==3 || i==4){
   myprintf(HL_DGRN,"%02x ",data[i]);  
  }
  else{   
   myprintf(HL_GRN,"%02x ",data[i]); 
  }  
 }
 putchar('\n'); 
}

將我們的測試針數(shù)據(jù),放進(jìn)去測試一下:

UCHAR frm[]={0x12,0x34,0x56,0x00,0x07,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
 
dump_frm("frm<<<",frm,sizeof(frm));

執(zhí)行結(jié)果:

圖片圖片

可以看到,這種幀格式,看起來會更加直觀。

5、完整代碼

國際慣例,貼上完整代碼。

需要的老鐵,直接拷貝帶你們的項目里吧!

#include <stdio.h>
#include <string.h>

typedef unsigned char UCHAR;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
#pragma pack(1)
typedef struct protocol_msg_align{
 UINT8 msgType;
 UINT8 data1;
 UINT8 data2;
 UINT16 len;
 char data[100];
}PRO_MSG_ALIGN;
#pragma

#define HL_TWK_RED_YEL  "\033[1m\033[5;31;43m" //閃爍高亮紅字黃底
#define HL_RED_WRT      "\033[1;31;47m"   //高亮紅色白底

#define HL_RED          "\033[1;31m"    //高亮紅色
#define HL_GRN          "\033[1;32m"    //高亮綠色
#define HL_YEL          "\033[1;33m"    //高亮黃色
#define HL_DGRN          "\033[1;36m"    //高亮深綠

#define PF_CLR  "\033[0m"       //清除 

 
#define myprintf(color, format, args...)        \
    do{           \  
            printf(color);             \
            printf(format, ##args);          \
            printf(PF_CLR);             \
    }while(0) 
  
void dump_frm(char *title,UINT8 *data,int len)
{
 int i=0;
  
 myprintf(HL_YEL,"%s\n",title);
 for(i=0;i<len;i++)
 {
  if(i==0){
   myprintf(HL_RED,"%02x ",data[i]);  
  }else if(i==3 || i==4){
   myprintf(HL_DGRN,"%02x ",data[i]);  
  }
  else{   
   myprintf(HL_GRN,"%02x ",data[i]); 
  }  
 }
 putchar('\n'); 
} 

int main(int args, char *argv[])
{
 UCHAR frm[]={0x12,0x34,0x56,0x00,0x07,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
 dump_frm("frm<<<",frm,sizeof(frm));
#if 0 
 printf("\033[1;31mThis text is in red and bold.\033[0m\n");
 printf("\033[0;31mThis text is in red and not bold.\033[0m\n");

 
 printf("\033[0;36m****一口Linux*****【0;36m】\033[0m\r\n");
 printf("\033[1;36m****一口Linux*****【1;36m】\033[0m\r\n");
 printf("\033[4;36m****一口Linux*****【4;36m】\033[0m\r\n");
 printf("\033[5;36m****一口Linux*****【5;36m】\033[0m\r\n");
 printf("\033[7;36m****一口Linux*****【7;36m】\033[0m\r\n");
 printf("\033[8;36m****一口Linux*****【8;36m】\033[0m\r\n");
 printf("\033[22;36m****一口Linux*****【22;36m】\033[0m\r\n");
 printf("\033[24;36m****一口Linux*****【24;36m】\033[0m\r\n");
 printf("\033[25;36m****一口Linux*****【25;36m】\033[0m\r\n");
 printf("\033[27;36m****一口Linux*****【27;36m】\033[0m\r\n");
 
    printf("\033[30m****一口Linux*****【30】\033[0m\r\n");
    printf("\033[31m****一口Linux*****【31】\033[0m\r\n");
    printf("\033[32m****一口Linux*****【32】\033[0m\r\n");
    printf("\033[33m****一口Linux*****【33】\033[0m\r\n");
    printf("\033[34m****一口Linux*****【34】\033[0m\r\n");
    printf("\033[35m****一口Linux*****【35】\033[0m\r\n"); 
    printf("\033[36m****一口Linux*****【36】\033[0m\r\n");
    printf("\033[37m****一口Linux*****【37】\033[0m\r\n"); 

    printf("\033[40m****一口Linux*****【40】\033[0m\r\n");
    printf("\033[41m****一口Linux*****【41】\033[0m\r\n");
    printf("\033[42m****一口Linux*****【42】\033[0m\r\n");
    printf("\033[43m****一口Linux*****【43】\033[0m\r\n");
    printf("\033[44m****一口Linux*****【44】\033[0m\r\n");
    printf("\033[45m****一口Linux*****【45】\033[0m\r\n"); 
    printf("\033[46m****一口Linux*****【46】\033[0m\r\n");
    printf("\033[47m****一口Linux*****【47】\033[0m\r\n"); 
 
 #endif
    return 0;
}


責(zé)任編輯:武曉燕 來源: 一口Linux
相關(guān)推薦

2019-06-17 06:18:27

邊緣計算物聯(lián)網(wǎng)霧計算

2019-06-26 05:14:32

性能優(yōu)化程序系統(tǒng)

2024-08-12 14:32:11

2020-12-08 09:52:22

數(shù)據(jù)庫工具技術(shù)

2015-07-17 11:12:43

IOS搜索API

2009-03-06 08:34:03

Windows 7美化微軟

2011-06-08 21:23:10

打印機(jī)推薦

2015-07-21 16:43:13

IOSUI

2016-01-06 09:49:59

青云/SDN

2009-08-19 11:23:12

C#操作Word

2016-04-05 10:12:58

HiveSQLHadoop

2015-12-08 16:14:04

2021-05-10 14:14:15

Windows 10Windows操作系統(tǒng)

2009-08-13 17:52:13

C#構(gòu)造函數(shù)

2009-08-18 13:06:17

C#枚舉類型

2009-08-27 17:50:09

interface接口

2011-12-23 09:16:19

2009-09-09 10:53:25

C# MessageB

2009-08-17 18:15:23

C# 枚舉使用

2021-11-28 22:57:41

C語言STM32寄存器
點贊
收藏

51CTO技術(shù)棧公眾號