成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

在平常的調試中,printf字體格式與顏色都是默認一致的。 

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

1、printf字體顯示語法說明

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

圖片圖片

語法說明:

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

其他ANSI控制碼:

/033[0m 關閉所有屬性
    /033[1m 設置高亮度
    /033[4m 下劃線
    /033[5m 閃爍
    /033[7m 反顯
    /033[8m 消隱
    /033[30m -- /033[37m 設置前景色
    /033[40m -- /033[47m 設置背景色
    /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 顯示光標

注意: 其中 顯示方式;字體顏色;背景顏色 可以任意組合,";"隔開即可。 使用 ANSI 轉義碼來設置文本樣式和顏色可能會因為不同的終端軟件和操作系統而產生不同的效果。 同時,這種方式也只適用于在終端上輸出,如果需要在 GUI 程序中設置文本顏色等效果,則需要使用相應的 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[' 是轉義序列的開始,'m' 是轉義序列的結束,'\033[0m' 表示將屬性重置為默認值。

運行結果:

圖片圖片

方式

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"       //清除

將系統提供的printf函數做一個封裝:

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

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

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

4.  美化程序的打印log

假設我們有如下格式的通信信令:

圖片圖片

調試通信協議,我們經常需要將通信的信令以16進制格式全部打印出來,這些數據看起來非常不直觀,

為方便查看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'); 
}

將我們的測試針數據,放進去測試一下:

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

執行結果:

圖片圖片

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

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;
}


責任編輯:武曉燕 來源: 一口Linux
相關推薦

2019-06-17 06:18:27

邊緣計算物聯網霧計算

2019-06-26 05:14:32

性能優化程序系統

2024-08-12 14:32:11

2020-12-08 09:52:22

數據庫工具技術

2009-03-06 08:34:03

Windows 7美化微軟

2015-07-21 16:43:13

IOSUI

2015-07-17 11:12:43

IOS搜索API

2011-06-08 21:23:10

打印機推薦

2016-01-06 09:49:59

青云/SDN

2009-08-19 11:23:12

C#操作Word

2015-12-08 16:14:04

2016-04-05 10:12:58

HiveSQLHadoop

2021-05-10 14:14:15

Windows 10Windows操作系統

2009-08-18 13:06:17

C#枚舉類型

2009-08-27 17:50:09

interface接口

2009-08-13 17:52:13

C#構造函數

2009-08-17 18:15:23

C# 枚舉使用

2009-09-09 10:53:25

C# MessageB

2021-11-28 22:57:41

C語言STM32寄存器

2011-12-23 09:16:19

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美少妇 | 爱爱小视频 | 国产乱码精品1区2区3区 | 欧美日韩精品 | 国产成人在线视频 | 欧美一区视频在线 | 99热国产精品 | 久久久国产精品视频 | 亚洲一区二区三区免费在线 | 成人高清在线视频 | 国产精品久久久久久久久婷婷 | 国产精品国产精品国产专区不蜜 | 国产在线对白 | 亚洲综合视频 | 性天堂网 | 精品久久99 | 欧美精品91 | 欧美久久免费观看 | 国产一区二区三区在线免费观看 | 人人爽日日躁夜夜躁尤物 | 澳门永久av免费网站 | 天天精品在线 | 久久久影院 | 99国内精品久久久久久久 | 一区二区在线视频 | 91精品国产综合久久久久久蜜臀 | 国产欧美精品在线 | 成人欧美一区二区 | 亚洲国产精品一区 | 狠狠夜夜 | 在线日韩av电影 | 亚洲国产一区二区三区在线观看 | 国产精品一区三区 | 中文字幕精品一区二区三区精品 | 久久精品亚洲一区二区三区浴池 | 国产1区2区3区 | 99热最新 | 一级高清免费毛片 | 婷婷成人在线 | 国产在线观看一区二区 | 日韩福利一区 |