通过内存地址输出该内存上存储的相应的64个字节数据,输出格式如下:
0x00040000 1234 5678 536e 4f7d1234 5678 536e4f7d
0x00040010 1234 5678 536e 4f7d1234 5678 536e4f7d
分析:每行共8个16位数据,共输出2行;且每4个字节相隔一个空字符。
步骤如下:定义一个数组指针,并将该数据单元的内存首地址赋值给数组指针;打印第一行内存地址
编程如下:
#include <iostream>
using namespace std;
void memprint(void *address,int datasize,int row)
{
unsignedchar *pAddr = (unsigned char*)address;
while(datasize)
{
int nCurSize = min(datasize, row);
printf("0x%8X", pAddr );
// 输出16进制数据
if((pAddr[i] < ' ') || (pAddr[i] >'z'))// 输出错误
{
printf("The datacan notbeerror!");
}
else{
for (int i = 0; i < nCurSize; i++)
{
printf("%4X", pAddr[i]);//输出数组pAddr[i]的32位数(16进制表示为%4X)
printf("");//补空白
}
}
printf("n");//换行输出
// 打印下一列
datasize -= nCurSize;
pAddr += nCurSize;
}
}
void main()
{
void*address;//内存单元地址
intdatasize;//数据大小
introw;//行大小
printf("输入数据大小和行的大小:");
scanf("%d%d", &datasize, &row);
address =(void*)malloc(datasize);
memprint(address, datasize, row);
free(address);
}