Skip to content

Instantly share code, notes, and snippets.

@ccbrown
Last active March 27, 2024 17:32
Show Gist options
  • Save ccbrown/9722406 to your computer and use it in GitHub Desktop.
Save ccbrown/9722406 to your computer and use it in GitHub Desktop.
Compact C Hex Dump Function w/ASCII
#include <stdio.h>
void DumpHex(const void* data, size_t size) {
char ascii[17];
size_t i, j;
ascii[16] = '\0';
for (i = 0; i < size; ++i) {
printf("%02X ", ((unsigned char*)data)[i]);
if (((unsigned char*)data)[i] >= ' ' && ((unsigned char*)data)[i] <= '~') {
ascii[i % 16] = ((unsigned char*)data)[i];
} else {
ascii[i % 16] = '.';
}
if ((i+1) % 8 == 0 || i+1 == size) {
printf(" ");
if ((i+1) % 16 == 0) {
printf("| %s \n", ascii);
} else if (i+1 == size) {
ascii[(i+1) % 16] = '\0';
if ((i+1) % 16 <= 8) {
printf(" ");
}
for (j = (i+1) % 16; j < 16; ++j) {
printf(" ");
}
printf("| %s \n", ascii);
}
}
}
}
@Hermxy
Copy link

Hermxy commented Jan 25, 2023

Thank you 👍👍👍

@0xNULLderef
Copy link

i copied this snippet so many times, it's actually amazing- thank you! really useful when debugging random byte crap :>

@david232818
Copy link

david232818 commented Feb 8, 2024

Thank you for sharing this!! 👍

I used this code for debugging in my personal project here and blog post that explains it.

@jwalkerbg
Copy link

jwalkerbg commented Feb 21, 2024

Thank you for this useful function.
I revised it and removed usage of printf function. Instead, a string buffer (strBuffer) is used for each line.
Also, DumpHex has third parameter - a pointer to a function that outputs the lines to the output (or to a file, or to a serial port or where the user wants to).

Renamed function to dump_hex.

Here is the link.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment