C/Hex Dump

From Attie's Wiki
Jump to: navigation, search

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];
	unsigned char *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(" %02hhX", 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.
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox