Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2684913
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: LINUX

2014-04-27 00:39:22


C语言 通过内存地址输出该内存上存储的相应数据

建个函数,如:memory(void *address,int datasize,int row),
输入相应的address、datasize、row即可输出如下表  的样式。memory(0x4132A0,256,16)的结果。
0x4132A0是输入的内存地址,右面16位是row为16的各内存存储的数据,16进制的。
datasize是16行*16列的数据范围。

供参考,没试过如何从任意地址开始打印:

#include  ;

void memory(void *address,int datasize,int row)
{
    unsigned char *pAddr = (unsigned char*)address;

    while (datasize)
    {
        int nCurSize = min(datasize, row);
        printf("0x%08X ", pAddr );

        // 输出16进制数据
        for (int i = 0; i < nCurSize; i++)
        {
            printf("%02x ", pAddr[i]);
        }
        // 补空白让ascii对齐
        for (int i = 0; i < (row - nCurSize); i++)
        {
            printf("   ");
        }
        // 输出ascii
        for (int i = 0; i < nCurSize; i++)
        {
            if ((pAddr[i] < ' ') || (pAddr[i] > 'z'))
            {
                printf(".");
            }
            else
            {
                printf("%c", (char)pAddr[i]);
            }
        }
        printf("\n");

        // 打印下一列
        datasize -= nCurSize;
        pAddr += nCurSize;
    }
}

void main()
{
    void* address;
    int datasize;
    int row;

    printf("输入数据大小和行的大小:");
    scanf("%d %d", &datasize, &row);

    address = (void*)malloc(datasize);
    memory(address, datasize, row);
    free(address);
}
提问者评价
谢谢!
不过我要的是C不是C++

阅读(3413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~