aboutsummaryrefslogtreecommitdiff
path: root/client/xxd.c
diff options
context:
space:
mode:
authorThomasintAnker <thomasintanker1@gmail.com>2024-05-31 15:06:06 +0200
committerThomasintAnker <thomasintanker1@gmail.com>2024-05-31 15:06:06 +0200
commit0278037aaf3fd497aae57d90f2638ceda3b12a6d (patch)
tree3354a14d4551b9524108d02971bfa42fc1ad4993 /client/xxd.c
parentb865921e5dcf2ae2d6532b88eba1a0a49998eb27 (diff)
parent18d06c79b9f6a625eb218a15c8216556fb99dc02 (diff)
Merge branch 'wip/client' into wip/i2c-communication
Diffstat (limited to 'client/xxd.c')
-rw-r--r--client/xxd.c44
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");
+ }
+}
+