我想你有时候可能和我一样需要打印内存片的值,既然有现成的,就拿来学习一下,以下函数引用自xrdp,我进行了些许修改
函数hexdump从指定地址开始打印指定长度的内存的ASCII码值。
语法
void
hexdump(
void *pSrc,
int len
)
{
unsigned char *line;
int i;
int thisline;
int offset;
line = (unsigned char *)pSrc;
offset = 0;
while (offset < len)
{
printf("%04x ", offset);
thisline = len - offset;
if (thisline > 16)
{
thisline = 16;
}
for (i = 0; i < thisline; i++)
{
printf("%02x ", line[i]);
}
for (; i < 16; i++)
{
printf(" ");
}
for (i = 0; i < thisline; i++)
{
printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
}
printf("\n");
offset += thisline;
line += thisline;
}
}
参数
pSrc 内存片的首地址
len 要打印的长度
返回值
无
测试用例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "hexdump.h"
int main()
{
int a, i;
char str[256] = { 0 };
srand(time(NULL));
int len = 256;
for (i = 0; i < len; ++i)
{
str[i] = i;
}
for (i = 0; i < len/2; ++i)
{
a = rand() % len;
str[a] = '\0';
}
hexdump(str, len);
}
结果: