From C
#include <stddef.h>
#include <stdio.h>
#include <ctype.h>
static void hexdump(const void * memory, size_t bytes);
int main(void) {
unsigned char ascii[256];
int i;
for (i = 0; i < sizeof ascii; ++i)
ascii[i] = i;
hexdump(ascii, sizeof ascii);
return 0;
}
static void hexdump(const void * memory, size_t bytes) {
const unsigned char * p, * q;
int i;
p = memory;
while (bytes) {
q = p;
printf("%p: ", (void *) p);
for (i = 0; i < 16 && bytes; ++i) {
printf("%02X ", *p);
++p;
--bytes;
}
bytes += i;
while (i < 16) {
printf("XX ");
++i;
}
printf("| ");
p = q;
for (i = 0; i < 16 && bytes; ++i) {
printf("%c", isprint(*p) && !isspace(*p) ? *p : ' ');
++p;
--bytes;
}
while (i < 16) {
printf(" ");
++i;
}
printf(" |\n");
}
return;
}