C/Hex Dump
From Attie's Wiki
(Difference between revisions)
(Created page with "The following code will dump <code>buffer</code> that is <code>bufferLen</code> bytes long. <source lang="c"> for (i = 0; i < bufferLen; i++) { if (i % 16 == 0) { printf("...") |
m |
||
Line 2: | Line 2: | ||
<source lang="c"> | <source lang="c"> | ||
+ | #define HEX_DUMP_WIDTH 16 | ||
+ | |||
+ | int i; | ||
+ | char row[HEX_DUMP_WIDTH]; | ||
+ | |||
for (i = 0; i < bufferLen; i++) { | for (i = 0; i < bufferLen; i++) { | ||
− | if (i % | + | if (i % HEX_DUMP_WIDTH == 0) { |
− | printf(" 0x%04X: ", i); | + | printf("0x%04X:", i); |
} | } | ||
− | printf(" | + | row[i % HEX_DUMP_WIDTH] = (buffer[i] >= ' ' && buffer[i] <= '~' ? buffer[i] : '.'); |
− | if (i % | + | printf(" %02X", buffer[i]); |
− | printf("\n"); | + | if (i % HEX_DUMP_WIDTH == HEX_DUMP_WIDTH - 1) { |
+ | printf(" | %*s\n", HEX_DUMP_WIDTH, row); | ||
} | } | ||
} | } | ||
if (i % 16 != 0) { | if (i % 16 != 0) { | ||
− | for (; i % | + | for (; i % HEX_DUMP_WIDTH != 0; i++) { |
− | printf(" | + | printf(" --"); |
+ | row[i % HEX_DUMP_WIDTH] = ' '; | ||
} | } | ||
− | printf("\n"); | + | printf(" | %16s\n", row); |
} | } | ||
</source> | </source> | ||
Line 21: | Line 28: | ||
The output will look like this: | The output will look like this: | ||
<source lang="text"> | <source lang="text"> | ||
− | + | 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. | ||
</source> | </source> |
Revision as of 10:36, 25 October 2013
The following code will dump buffer
that is bufferLen
bytes long.
#define HEX_DUMP_WIDTH 16 int i; char row[HEX_DUMP_WIDTH]; for (i = 0; i < bufferLen; i++) { if (i % HEX_DUMP_WIDTH == 0) { printf("0x%04X:", i); } row[i % HEX_DUMP_WIDTH] = (buffer[i] >= ' ' && buffer[i] <= '~' ? buffer[i] : '.'); printf(" %02X", buffer[i]); if (i % HEX_DUMP_WIDTH == HEX_DUMP_WIDTH - 1) { printf(" | %*s\n", HEX_DUMP_WIDTH, row); } } if (i % 16 != 0) { for (; i % HEX_DUMP_WIDTH != 0; i++) { printf(" --"); row[i % HEX_DUMP_WIDTH] = ' '; } printf(" | %16s\n", 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.