summaryrefslogtreecommitdiff
path: root/util.c
blob: be7083cefc3929a18955b080ac1f7b8234cb6786 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <ctype.h>
#include "util.h"


void xxd(const void *buf_, size_t length) {
	unsigned char *buf = (unsigned char*)buf_;

	for (size_t cursor = 0; cursor < length;) {
		printf("%08zx:", cursor);

		for (int i = 0; i < 16; i++) {
			if (i % 2 == 0) printf(" ");
			if (i % 8 == 0) printf(" ");
			if (cursor + i < length) printf("%02x", (unsigned)buf[cursor + i]);
			else printf("  ");
		}

		printf("  |");

		for (int i = 0; i < 16 && cursor + i < length; i++) {
			if (isprint(buf[cursor + i])) printf("%c", buf[cursor + i]);
			else printf(".");
		}

		printf("|\n");

		cursor += 16;
	}
}