-
Star
(116)
You must be signed in to star a gist -
Fork
(31)
You must be signed in to fork a gist
-
-
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!