?今天給大家介紹一個(gè)非常有效的打印字節(jié)數(shù)組的函數(shù),它的顯示方式跟Linux命令行的hexdump的輸出非常類似。
先給大家上一個(gè)效果圖:

它的輸出分為三部分:字節(jié)偏移量、16進(jìn)制字節(jié)數(shù)據(jù)、ASCII碼可顯字符;
其中ASCII部分,如果對(duì)應(yīng)的字節(jié)是非可顯字符,則用.代替。
立馬送上它的函數(shù)實(shí)現(xiàn):
#include
#include
int log_hexdump(const char *title, const unsigned char *data, int len)
{
char str[160], octet[10];
int ofs, i, k, d;
const unsigned char *buf = (const unsigned char *)data;
const char dimm[] = "+------------------------------------------------------------------------------+";
printf("%s (%d bytes):\r\n", title, len);
printf("%s\r\n", dimm);
printf("| Offset : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF |\r\n");
printf("%s\r\n", dimm);
for (ofs = 0; ofs < (int)len; ofs += 16) {
d = snprintf( str, sizeof(str), "| %08X: ", ofs );
for (i = 0; i < 16; i++) {
if ((i + ofs) < (int)len) {
snprintf( octet, sizeof(octet), "%02X ", buf[ofs + i] );
} else {
snprintf( octet, sizeof(octet), " " );
}
d += snprintf( &str[d], sizeof(str) - d, "%s", octet );
}
d += snprintf( &str[d], sizeof(str) - d, " " );
k = d;
for (i = 0; i < 16; i++) {
if ((i + ofs) < (int)len) {
str[k++] = (0x20 <= (buf[ofs + i]) && (buf[ofs + i]) <= 0x7E) ? buf[ofs + i] : '.';
} else {
str[k++] = ' ';
}
}
str[k] = '\0';
printf("%s |\r\n", str);
}
printf("%s\r\n", dimm);
return 0;
}
int main(int argc, const char *argv[])
{
unsigned char test_buf[12] = {3 , 6, 7, 9, 234, 67, 77};
char *msg_ch = "我是一個(gè)中文字符串";
char *msg_en = "I am english string";
log_hexdump("test_buf", test_buf, sizeof(test_buf));
log_hexdump("msg_ch", msg_ch, strlen(msg_ch));
printf("msg_ch: %s\r\n\r\n\r\n", msg_ch);
log_hexdump("msg_en", msg_en, strlen(msg_en));
printf("msg_en: %s\r\n\r\n\r\n", msg_en);
return 0;
}

調(diào)用代碼也很簡(jiǎn)單,就像上面的main函數(shù)調(diào)用一樣。
好了,這個(gè)使用的打印函數(shù)就介紹到這里,感興趣的可以研究下它的源碼,希望能夠幫助到你。
?審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219030 -
字節(jié)
+關(guān)注
關(guān)注
0文章
44瀏覽量
14379 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67504 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1614瀏覽量
44875
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
【RT-Thread學(xué)習(xí)筆記】使用scons命令生成靜態(tài)庫(kù)
【RT-Thread學(xué)習(xí)筆記】如何使用scons 命令中buildlib的生成靜態(tài)庫(kù)?
在rt-thread系統(tǒng)中,使用stm32,怎樣設(shè)置接收中斷字節(jié)數(shù)?
在rt-thread系統(tǒng)中,使用stm32,怎樣設(shè)置接收中斷字節(jié)數(shù)
發(fā)表于 09-15 06:17
RT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用
RT-Thread 應(yīng)用筆記 - 不正確使用LOG也會(huì)引發(fā)hard faultRT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用RT-
發(fā)表于 01-25 18:18
?10次下載
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 理解defunct僵尸線程
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
發(fā)表于 01-25 18:19
?9次下載
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 設(shè)備模型rt_device的理解
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
發(fā)表于 01-25 18:19
?8次下載
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象鏈表結(jié)構(gòu)深入理解
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
發(fā)表于 01-25 18:23
?6次下載
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象初始化鏈表組織方式
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
發(fā)表于 01-25 18:24
?3次下載
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象操作API
RT-Thread 內(nèi)核學(xué)習(xí)筆記 - 內(nèi)核對(duì)象rt_objectRT-Thread 內(nèi)核學(xué)習(xí)筆記
發(fā)表于 01-25 18:26
?7次下載
RT-Thread學(xué)習(xí)筆記分享
我是從2020年11月初開(kāi)始學(xué)習(xí)RT-Thread實(shí)時(shí)操作系統(tǒng)的,在學(xué)習(xí)RT-Thread之前,我接觸過(guò)uCOS和FreeRTOS,但這兩個(gè)在單片機(jī)上應(yīng)用的實(shí)時(shí)操作系統(tǒng),我都沒(méi)有仔細(xì)并
RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述
RT-Thread 簡(jiǎn)介 作為一名 RTOS 的初學(xué)者,也許你對(duì) RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會(huì)逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
【RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報(bào)文
【RT-Thread學(xué)習(xí)筆記】如何抓取終端的網(wǎng)絡(luò)報(bào)文?
基于RT-Thread Studio學(xué)習(xí)
前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開(kāi)啟rt-thread學(xué)習(xí)之旅。
【RT-Thread學(xué)習(xí)筆記】使用hexdump打印字節(jié)數(shù)組
評(píng)論