以字节为单位显示变量的内存存储数据
2013-08-21 12:56
274 查看
地址:/article/1392141.html转载请标明出处,谢谢。欢迎关注微博:http://weibo.com/MoreWindows
之前在《位操作基础篇之位操作全面总结》中写了一个变量内存存储查看函数——PrintfBinary,代码如下:
地址:/article/1392141.html转载请标明出处,谢谢。欢迎关注微博: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(" - /article/1392141.html -\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; }程序运行结果如下:
地址:/article/1392141.html转载请标明出处,谢谢。欢迎关注微博:http://weibo.com/MoreWindows
相关文章推荐
- 以字节为单位显示变量的内存存储数据
- 以字节为单位显示变量的内存存储数据
- 大端存储 小端存储 (终极版本Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建)
- windows下变量在内存中的字节存储顺序(c语言)
- 数据内存存储(常量,局部变量,全局变量,程序代码)
- 变量和数据是如何存储在内存中
- 基本数据类型变量 结构体 union 类的内存字节对齐
- 把含一字节变量的16进制格式数据转换为字符串显示
- 1怎么理解,说int存的是“32位整型”数据? 2一个“字节”多少“位” 3“字节”是存储的单位,那么计算机是怎么存储的?即“位”吗?
- 使用位域及共用体的知识显示位域数据在内存 中的存储形式。
- 3.2 将变量及数据存储在内存中
- 计算机数据存储单位解析 -- 什么是位、字节、字、KB、MB?
- java中的各种数据类型在内存中存储的方式
- java+内存分配及变量存储位置的区别
- echarts 3 动态显示最近一天数据,以分为单位获取数据点
- 浮点型数据在内存中的存储【转】
- 如何直接显示内存中的二进制图像数据
- Java知识点<2> 各个基本数据类型在内存中占的字节大小
- *.cpl文件的妙用(随意修改cpu显示数据,内存显示随意修改等等)
- 字符数据在内存中的存储形式及其使用方法(C实现)