地址:http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/10021601 -\n"); printf(" -- By MoreWindows( http://blog.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/10021601转载请标明出处,谢谢。
欢迎关注微博:http://weibo.com/MoreWindows
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow