-
-
Save ccbrown/9722406 to your computer and use it in GitHub Desktop.
#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); | |
} | |
} | |
} | |
} |
Nice π
Brilliant, thanks!
Thanks!
Perfect! Thank you
Thank you!
Modified your code a little to return char* instead of writing to device here.
thanks
π
@ccbrown any chance you could attach a license of some kind to this code? :)
@Flameeyes my intention when I created this gist was that people would do whatever they want with it. Not gonna add this directly to the gist, but consider it WTFPL. :)
Oh, thanks )
Hi All, Thanks ccbrown. Very good work.
If you are interested in enabling column specification to this code try these modifications:
- Add #include <stdlib.h>
- Change Line 3: void DumpHex(const void* data, size_t size, size_t columns) {
- Replace line 4: with :
size_t half_columns = (columns/2);
columns = half_columns * 2;
char *ascii = (char *) malloc(columns+1); - Change both occurrences of "8" with 'half_columns' and the 8 occurrences of "16" with 'columns'
- Finally insert this after line 29:
free(ascii);
Enjoy.
Thank you πππ
i copied this snippet so many times, it's actually amazing- thank you! really useful when debugging random byte crap :>
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.
You don't know the number of times I came back here and copied this code, much appreciated! πππ
Thanks!