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

建个函数,如:memory(void*address,intdatasize,introw),输入相应的address、datasize、row即可输出如下表http:/... 建个函数,如:memory(void *address,int datasize,int row), 输入相应的address、datasize、row即可输出如下表 http://hiphotos.baidu.com/lufil999/pic/item/d49b3f6629c28595e6113afa.jpg
的样式。memory(0x4132A0,256,16)的结果。 0x4132A0是输入的内存地址,右面16位是row为16的各内存存储的数据,16进制的。 datasize是16行*16列的数据范围。
展开
 我来答
sai_84
推荐于2016-02-06 · TA获得超过531个赞
知道小有建树答主
回答量:264
采纳率:100%
帮助的人:418万
展开全部
供参考,没试过如何从任意地址开始打印:

#include <iostream>
using namespace std;

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);
}
4443248866c59
推荐于2016-10-05 · 知道合伙人数码行家
4443248866c59
知道合伙人数码行家
采纳数:4064 获赞数:87694
本人热心公益,喜欢帮助他人解决问题。

向TA提问 私信TA
展开全部
c的char数据属于基本类型,基本类型其中还包括-整型,实型,枚举类型。
数据在内存中是以二进制形式存放的。数值是以补码表示的。
整型:
一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”
实型:
在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分。
字符型:
在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式