<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      如何讓你的C語言程序打印的log多一點色彩?(超級實用)

      接著上一篇文章《由字節對齊引發的一場“血案“

      在平常的調試中,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;
      }
      
      
      posted @ 2024-08-17 11:13  一口Linux  閱讀(282)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产亚洲精品AA片在线爽 | 国产精品中文字幕日韩| 一区二区三区精品视频免费播放| 人人入人人爱| 啊轻点灬大JI巴太粗太长了欧美| 国产真人无遮挡免费视频| 中文字幕一区二区三区久久蜜桃 | 熟女人妻aⅴ一区二区三区电影| 77777亚洲午夜久久多人| 成人午夜福利一区二区四区| 人成午夜免费大片| 免费看成人欧美片爱潮app| 国产人成亚洲第一网站在线播放| 国产一二三五区不在卡| 国产特级毛片aaaaaa高清| 98久久人妻少妇激情啪啪| 国产色精品久久人妻| 麻豆国产黄色一级免费片| 中文字幕av日韩有码| 韩国免费a级毛片久久| 久久国产成人午夜av影院| 国产精品免费观看色悠悠| 人人爽人人爽人人片a免费| 亚洲精品喷潮一区二区三区 | 亚欧乱色国产精品免费九库| 中文字幕人妻中文AV不卡专区| 国产喷水1区2区3区咪咪爱av| 人妻换着玩又刺激又爽| 乌兰察布市| 国产精品自拍午夜福利| 久久久久久亚洲精品成人| 8av国产精品爽爽ⅴa在线观看| 一区二区三区在线 | 欧洲| 国产高颜值不卡一区二区| 亚洲国产精品一区二区久| 黄又色又污又爽又高潮| 伦伦影院午夜理论片| 亚洲国产成人精品福利无码| 无码精品一区二区免费AV| 一区二区国产高清视频在线| 国产91精品一区二区蜜臀|