diff options
| author | ThomasintAnker <thomasintanker1@gmail.com> | 2024-05-31 15:06:06 +0200 |
|---|---|---|
| committer | ThomasintAnker <thomasintanker1@gmail.com> | 2024-05-31 15:06:06 +0200 |
| commit | 0278037aaf3fd497aae57d90f2638ceda3b12a6d (patch) | |
| tree | 3354a14d4551b9524108d02971bfa42fc1ad4993 /client/xxd.c | |
| parent | b865921e5dcf2ae2d6532b88eba1a0a49998eb27 (diff) | |
| parent | 18d06c79b9f6a625eb218a15c8216556fb99dc02 (diff) | |
Merge branch 'wip/client' into wip/i2c-communication
Diffstat (limited to 'client/xxd.c')
| -rw-r--r-- | client/xxd.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/client/xxd.c b/client/xxd.c new file mode 100644 index 0000000..5d83635 --- /dev/null +++ b/client/xxd.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <ctype.h> + +#include "xxd.h" + +void xxd(const char * data, size_t size) { + size_t fake_size = size + (16 - size % 16) % 16; + + for (size_t base = 0; base < fake_size; base += 16) { + printf("%08lx: ", base); + + // print bytes + for (size_t offset = 0; offset < 16; offset++) { + size_t i = base + offset; + + if (offset == 8) printf(" "); + + if (i >= size) { + printf(" "); + continue; + } + + printf("%02x ", data[i] & 0xff); + } + + // print ascii representation + printf(" |"); + for (size_t offset = 0; offset < 16; offset++) { + size_t i = base + offset; + + if (i >= size) { + printf(" "); + continue; + } + + if (isprint(data[i])) + printf("%c", data[i]); + else + printf("."); + } + printf("|\n"); + } +} + |