在网络抓包,需要查看二进制文件内容,内存等信息的时候,经常需要输出其16进制值,有时还希望打印出可打印字符串值,因此用C写了个函数,如下:
void hexdump(unsigned char *buf, unsigned int buf_len) {
int i, j, mod = buf_len % 16;
int n = 16 - mod;
for (i = 0; i < buf_len; i++)
{
if (i % 16 == 0 && i != 0)
{
printf("\n");
}
printf("%02X ", buf[i]);
if ((i + 1) % 16 == 0)
{
printf("\t");
for (j = i - 15; j <= i; j++)
{
if (j == i - 8)
printf(" ");
if (buf[j] >= 32 && buf[j] < 127)
printf("%c", buf[j]);
else
printf(".");
}
}
}
for (i = 0; i < n; i++)
printf(" ");
printf("\t");
for (i = buf_len - mod; i < buf_len; i++)
{
if (i == buf_len - mod + 8)
printf(" ");
if (buf[i] >= 32 && buf[i] < 127)
printf("%c", buf[i]);
else
printf(".");
}
printf("\n");
}
网络包打印效果如下: