免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: er
打印 上一主题 下一主题

帮忙写个宏定义 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-09-11 09:47 |只看该作者
另外又有个需求,想打印出一个指针指向的地址中的内容,本来不难,但是有个前提很变态,就是调用一次终端输出函数,会自动换行,大家看看,有没有好办法,下面是我的硬编码


  1. void my_printf(const char *id, const void *ptr)
  2. {
  3.         const char *array = (const char *)ptr;
  4.         sdebug_printf(LOCAL_DBG_LVL_NOTES,
  5.                                                 "%s: "
  6.                                                 "%02x%02x%02x%02x "
  7.                                                 "%02x%02x%02x%02x "
  8.                                                 "%02x%02x%02x%02x "
  9.                                                 "%02x%02x%02x%02x ",
  10.                                                 id,
  11.                                                 array[0], array[1], array[2], array[3],
  12.                                                 array[4],        array[5], array[6], array[7],
  13.                                                 array[8], array[9],        array[10], array[11],
  14.                                                 array[12], array[13], array[14], array[15]
  15.                                                 );
  16. }
  17. #define P_HEX_16(arg) my_printf(#arg, arg)
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-09-11 09:56 |只看该作者
原帖由 er 于 2006-9-11 09:47 发表
另外又有个需求,想打印出一个指针指向的地址中的内容,本来不难,但是有个前提很变态,就是调用一次终端输出函数,会自动换行,大家看看,有没有好办法,下面是我的硬编码


lz参考一下我在主题:给大家出一个可能有一点用处的题目   ( 思一克 发表于:2006-08-17 16:56 )里那个函数应该可以。更多其他解决方案里面也有。


  1. static void print_memory(const char *name, const void *mem, unsigned int len)
  2. {
  3.         void *storage = (void *) mem;
  4.         int i;
  5.         printf("\nmemory dump start <%s>\t ---------------{", name, mem);
  6.         for (i = 0; i < len; i++) {
  7.                 int h = * (unsigned char *)(storage + i);
  8.                 if (i % 16 == 0) printf("\n%.*xh: ", 8, (i & 0xFFF0) + (int) mem);
  9.                 printf("%.*X ", 2, h);
  10.         }
  11.         printf("\nmemory dump end  <%s>\t ---------------}\n", name);
  12. }


  13. #define log_printbuf(buf, len) \
  14.         do { \
  15.                 const void *mem = (const void *) buf; \
  16.                 printf("%s | LINE %d\t"#buf" (%d) at (%p)", __FILE__, __LINE__, len, mem); \
  17.                 print_memory(#buf, mem, len); \
  18.         } while (0)

复制代码


对楼主的需求函数做了点小改动,在此基础上,可调整成楼主需要的格式。


  1. int main()
  2. {
  3.     char buf[256] = {0,};
  4.     buf[0] = 0;
  5.     buf[1] = 0;
  6.     buf[2] = 1;
  7.     strcpy(buf+3, "ABCDSKKKKLKKKKASKK" ) ;
  8.         log_printbuf(buf, 56);
  9. }

  10. 测试输出格式为:
  11. demo04.c | LINE 58      buf (58) at (0xfee771a0)
  12. memory dump start <buf>  ---------------{
  13. fee771a0h: 00 00 01 41 42 43 44 53 4B 4B 4B 4B 4C 4B 4B 4B
  14. fee771b0h: 4B 41 53 4B 4B 00 00 00 00 00 00 00 00 00 00 00
  15. fee771c0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  16. fee771d0h: 00 00 00 00 00 00 00 00 00 00
  17. memory dump end  <buf>   ---------------}
复制代码

[ 本帖最后由 ftInternet 于 2006-9-11 10:00 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2006-09-11 10:10 |只看该作者
谢谢楼上,但是我的要求很变态调用一次sdebug_printf函数会自动换行(没加换行符\n),所以很头疼
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP