mirror of
https://github.com/Spritetm/minimacplus.git
synced 2024-09-24 21:55:50 +00:00
51 lines
945 B
C
51 lines
945 B
C
#include <stdio.h>
|
|
#include <ctype.h>
|
|
|
|
#ifndef HEXDUMP_COLS
|
|
#define HEXDUMP_COLS 8
|
|
#endif
|
|
|
|
void hexdump(void *mem, unsigned int len)
|
|
{
|
|
unsigned int i, j;
|
|
|
|
for(i = 0; i < len + ((len % HEXDUMP_COLS) ? (HEXDUMP_COLS - len % HEXDUMP_COLS) : 0); i++)
|
|
{
|
|
/* print offset */
|
|
if(i % HEXDUMP_COLS == 0)
|
|
{
|
|
printf("0x%06x: ", i);
|
|
}
|
|
/* print hex data */
|
|
if(i < len)
|
|
{
|
|
printf("%02x ", 0xFF & ((char*)mem)[i]);
|
|
}
|
|
else /* end of block, just aligning for ASCII dump */
|
|
{
|
|
printf(" ");
|
|
}
|
|
|
|
/* print ASCII dump */
|
|
if(i % HEXDUMP_COLS == (HEXDUMP_COLS - 1))
|
|
{
|
|
for(j = i - (HEXDUMP_COLS - 1); j <= i; j++)
|
|
{
|
|
if(j >= len) /* end of block, not really printing */
|
|
{
|
|
putchar(' ');
|
|
}
|
|
else if(isprint(((unsigned char*)mem)[j])) /* printable char */
|
|
{
|
|
putchar(0xFF & ((unsigned char*)mem)[j]);
|
|
}
|
|
else /* other char */
|
|
{
|
|
putchar('.');
|
|
}
|
|
}
|
|
putchar('\n');
|
|
}
|
|
}
|
|
}
|