使用C++实现对指针对象在内存中数据的打印

代码如下:

#define u1 unsigned char

void debug(void* ptr, size_t size, int column = 16)
{
	if (column <= 0) return;

	u1* beg = (u1*)ptr;
	u1* end = (u1*)ptr + size;
	int cnt = 0;
	int linenumber = 1;

	printf("    \t");
	for (u1 i = 0; i < column; ++i)
		printf("%02x ", i);
	printf("\n");

	for (u1* p = beg; p < end; ++p)
	{
		if (cnt == 0)
			printf("\n%04x\t", linenumber++);

		printf("%02x ", *p);
		++cnt;

		if (cnt == column)
		{
			printf("    ");
			u1* bufp = p - (cnt - 1);
			while (bufp <= p)
			{
				printf("%c ", *bufp <= '!' ? '.' : *bufp);
				++bufp;
			}
			cnt = 0;
		}
	}
	printf("\n\n");
}

效果:

        00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f

0001    53 74 5f 41 73 73 65 6d 62 6c 79 00 00 00 00 00     S t _ A s s e m b l y . . . . .
0002    53 74 5f 44 65 63 6c 61 72 61 74 69 6f 6e 00 00     S t _ D e c l a r a t i o n . .
0003    00 00 00 00 00 00 00 00 6b 61 70 71 00 00 00 00     . . . . . . . . k a p q . . . .
0004    53 74 5f 4d 61 6e 69 66 65 73 74 00 00 00 00 00     S t _ M a n i f e s t . . . . .
0005    04 00 00 00 00 00 00 00 02 00 00 01 00 00 00 00     . . . . . . . . . . . . . . . .
0006    00 00 00 00 00 00 00 00 53 74 5f 43 6f 6e 73 74     . . . . . . . . S t _ C o n s t
0007    61 6e 74 70 6f 6f 6c 00 0e 00 00 00 00 00 00 00     a n t p o o l . . . . . . . . .
0008    0c 00 00 00 00 00 00 00 d0 04 ae dd 6c 02 00 00     . . . . . . . . D . ? Y l . . .
0009    53 74 5f 43 6c 61 73 73 43 6f 6c 6c 65 63 74 69     S t _ C l a s s C o l l e c t i
000a    6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00     o n . . . . . . . . . . . . . .
000b    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     . . . . . . . . . . . . . . . .
000c    53 74 5f 43 6c 61 73 73 43 6f 6c 6c 65 63 74 69     S t _ C l a s s C o l l e c t i
000d    6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00     o n . . . . . . . . . . . . . .
000e    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     . . . . . . . . . . . . . . . .
000f    53 74 5f 49 6e 74 65 72 66 61 63 65 43 6f 6c 6c     S t _ I n t e r f a c e C o l l
0010    65 63 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00     e c t i o n . . . . . . . . . .
0011    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     . . . . . . . . . . . . . . . .
0012    53 74 5f 45 6e 75 6d 43 6f 6c 6c 65 63 74 69 6f     S t _ E n u m C o l l e c t i o
0013    6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     n . . . . . . . . . . . . . . .
0014    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     . . . . . . . . . . . . . . . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值