C语言打印hexdump的最好实践

Posted fogcell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言打印hexdump的最好实践相关的知识,希望对你有一定的参考价值。

好久没有更新博客了,今天更新下。

  在开发调试debug中经常需要查看原始二进制信息,特别是当不能直接打印字符串时,查看原始二进制就特别有用了。以下的简单函数可以打印出像hexdump命令一样格式的信息。调试开发中特别方便和直观。源码来源于eCos。

 1 typedef unsigned char    cyg_uint8  ;
 2 typedef unsigned int CYG_ADDRWORD;
 3 typedef int __printf_fun(const char *fmt, ...);
 4 void
 5 diag_vdump_buf_with_offset(__printf_fun *pf,
 6                            cyg_uint8     *p,
 7                            CYG_ADDRWORD   s,
 8                            cyg_uint8     *base)
 9 
10     int i, c;
11     if ((CYG_ADDRWORD)s > (CYG_ADDRWORD)p) 
12         s = (CYG_ADDRWORD)s - (CYG_ADDRWORD)p;
13     
14     while ((int)s > 0) 
15         if (base) 
16             (*pf)("%08X: ", (CYG_ADDRWORD)p - (CYG_ADDRWORD)base);
17          else 
18             (*pf)("%08X: ", p);
19         
20         for (i = 0;  i < 16;  i++) 
21             if (i < (int)s) 
22                 (*pf)("%02X ", p[i] & 0xFF);
23              else 
24                 (*pf)("   ");
25             
26         if (i == 7) (*pf)(" ");
27         
28         (*pf)(" |");
29         for (i = 0;  i < 16;  i++) 
30             if (i < (int)s) 
31                 c = p[i] & 0xFF;
32                 if ((c < 0x20) || (c >= 0x7F)) c = .;
33              else 
34                 c =  ;
35             
36             (*pf)("%c", c);
37         
38         (*pf)("|\\n");
39         s -= 16;
40         p += 16;
41     
42 
43 
44 void
45 diag_dump_buf_with_offset(cyg_uint8     *p,
46                           CYG_ADDRWORD   s,
47                           cyg_uint8     *base)
48 
49     diag_vdump_buf_with_offset(printf, p, s, base);
50 
51 
52 void
53 diag_dump_buf(void *p, CYG_ADDRWORD s)
54 
55    diag_dump_buf_with_offset((cyg_uint8 *)p, s, 0);
56 

使用时直接调用:diag_dump_buf(buf,len);即可。注意小心长度不要越界。

结果示例:

技术图片

 

以上是关于C语言打印hexdump的最好实践的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X 上的`probemod` 打印出神秘的 hexdump 而不是模块名称

在 perl 中将数据打印为 hexdump

hexdump

Linux 命令(142)—— hexdump 命令

Linux 命令(142)—— hexdump 命令

Linux hexdump命令