diff options
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -0,0 +1,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; + } +} |