以字节为单位显示变量的内存存储数据

               

地址:http://blog.csdn.net/morewindows/article/details/10021601

转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows    

 

之前在《位操作基础篇之位操作全面总结》中写了一个变量内存存储查看函数——PrintfBinary,代码如下:

template <class T>void PrintfBinary(T a){  int i;  for (i = sizeof(a) * 8 - 1; i >= 0; --i)  {    if ((a >> i) & 1)      putchar('1');    else       putchar('0');    if (i == 8)      putchar(' ');  }  putchar('\n');}

由于这个函数只能查看整型数据,对浮点数类型数据,结构体对象,类对象都不能查看。因此写了个功能强大点的,代码如下:

void PrintfBinaryOneByte(char cByte)for (int i = 7; i >= 0; --i)  {    if ((cByte >> i) & 1)        putchar('1');      else         putchar('0');   }}// 从pStartAddress地址开始输出byteNum个字节void PrintfBinaryByte(unsigned char *pStartAddress, int byteNum)// address  for (int i = 0; i < byteNum; i++)  {    printf("0x%08x ", pStartAddress + i);  }  putchar('\n');  // hexadecimal  for (int i = 0; i < byteNum; i++)  {    unsigned char cByte = *(pStartAddress + i);    printf("  %8x ", cByte);  }  putchar('\n');  // decimal  for (int i = 0; i < byteNum; i++)  {    unsigned char cByte = *(pStartAddress + i);    printf("  ");    PrintfBinaryOneByte(cByte);    putchar(' ');  }  printf("\n\n");}// 以字节为单位显示变量的内存存储数据// By MoreWindows (http://blog.csdn.net/MoreWindows)template <class T>void PrintfBinaryEveryByte(T &a){  unsigned char* pstr = (unsigned char*)&a;  int byteNum = sizeof(a);  printf("首地址: 0x%08x 字节数: %d\n", pstr, byteNum);  while (byteNum > 0)  {    PrintfBinaryByte(pstr, byteNum > 4 ? 4 : byteNum);    byteNum -= 4;    pstr += 4;  }  printf("\n\n");}

测试一下:

#include <stdio.h>struct Node1{  int i;  char c;};struct Node2{    char c;  int i;};int main(){   printf("    以字节为单位显示变量的内存存储数据 \n");    printf(" - http://blog.csdn.net/morewindows/article/details/10021601 -\n");    printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");  int i = 0x12345678;  PrintfBinaryEveryByte(i);  short s = 0xfeed;  PrintfBinaryEveryByte(s);  Node1 n1;  n1.i = 0x12345678;  n1.c = 'a';  PrintfBinaryEveryByte(n1);  Node2 n2;  n2.i = 0x9abcdef0;  n2.c = 'a';  PrintfBinaryEveryByte(n2);  char c = '0';  PrintfBinaryEveryByte(c);  double d = 1.0;  PrintfBinaryEveryByte(d);  return 0;}

程序运行结果如下:

 

地址:http://blog.csdn.net/morewindows/article/details/10021601转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows  

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值