地址: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