C/Hex Dump
From Attie's Wiki
(Difference between revisions)
m |
m |
||
Line 1: | Line 1: | ||
− | The following code will dump <code> | + | The following code will dump <code>data</code> that is <code>len</code> bytes long. |
+ | The dump will be <code>width</code> bytes wide. | ||
<source lang="c"> | <source lang="c"> |
Revision as of 11:21, 25 October 2013
The following code will dump data
that is len
bytes long.
The dump will be width
bytes wide.
void hex_dump(void *data, size_t len, int width) { int i; char row[64]; uint8_t *d = data; if (data == NULL || len == 0) return; if (width < 1) { width = 1; } else if (width > sizeof(row)) { width = sizeof(row); } for (i = 0; i < len; i++) { if (i % width == 0) { printf("0x%04X:", i); } row[i % width] = (d[i] >= ' ' && d[i] <= '~' ? d[i] : '.'); printf(" %02X", d[i]); if (i % width == width - 1) { printf(" | %.*s\n", width, row); } } if (i % width != 0) { for (; i % width != 0; i++) { printf(" --"); row[i % width] = ' '; } printf(" | %.*s\n", width, row); } }
The output will look like this:
0x0000: E2 80 B9 45 C3 BF 75 C3 A4 C3 BF 75 C3 BC E2 80 | ...E..u....u.... 0x0010: B0 30 E2 80 B9 45 E2 80 B0 38 C3 BF 40 41 C3 BF | .0...E...8..@A.. 0x0020: 75 C3 BC C3 BF 75 C3 BF C3 A8 42 41 E2 80 B9 C3 | u....u....BA.... 0x0030: 87 5F 5E C3 89 C3 83 55 E2 80 B9 C3 AC C6 92 C3 | ._^....U........ 0x0040: AC 64 E2 80 B9 45 48 74 54 2D E2 80 B9 45 75 C6 | .d...EHtT-...Eu. 0x0050: 92 C3 B8 74 37 C6 92 C3 B8 74 C6 92 C3 B8 76 C6 | ...t7....t....v. 0x0060: 92 C3 B8 76 28 C3 BF 75 50 C3 BF 75 C3 BF 75 C3 | ...v(..uP..u..u. 0x0070: A8 28 C3 A7 C3 BF C3 BF C3 A9 E2 84 A2 6A C3 BF | .(...........j.. 0x0080: 75 C3 BF C3 B0 42 41 66 3D C3 BF 74 0A C2 B7 C3 | u....BAf=..t.... 0x0090: 80 50 C3 BF 20 43 41 33 C3 80 C3 A9 77 E2 80 B9 | .P.. CA3....w... 0x00A0: 45 53 56 33 C3 9B E2 80 B9 57 E2 80 B0 45 C3 A4 | ESV3.....W...E.. 0x00B0: E2 80 B0 5D E2 80 B9 E2 80 B9 50 66 E2 80 B9 40 | ...]......Pf...@ 0x00C0: E2 80 B0 4D C3 98 C2 B7 C3 B0 E2 80 B0 45 C3 AC | ...M.........E.. 0x00D0: E2 80 B9 C3 86 C6 92 C3 A0 E2 80 B0 55 C3 A8 2B | ............U..+ 0x00E0: C3 83 C3 87 45 C3 BC C3 BF E2 80 9E 36 6A 48 59 | ....E.......6jHY 0x00F0: E2 80 9E 2B C3 81 E2 80 9E C3 8B 48 E2 80 9E C5 | ...+.......H.... 0x0100: BE 2B C3 81 74 50 48 74 35 48 E2 80 A6 25 C2 A1 | .+..tPHt5H...%.. 0x0110: C3 80 43 E2 80 B0 4D C2 8D CB 86 63 C2 81 E2 80 | ..C...M....c.... 0x0120: B0 4D C2 BC E2 80 B0 45 C3 80 66 C3 -- -- -- -- | .M.....E..f.