summaryrefslogtreecommitdiffstats
path: root/src/stringutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/stringutils.h')
-rw-r--r--src/stringutils.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/stringutils.h b/src/stringutils.h
new file mode 100644
index 0000000..824d09d
--- /dev/null
+++ b/src/stringutils.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <stdlib.h>
+
+/**
+ * @brief Get a hexadecimal string representation from memory buffer.
+ * @param[in] src Buffer's pointer.
+ * @param[in] sz Buffer's size.
+ * @return A pointer to the result string. Caller is responsible for the result lifetime.
+ */
+static inline char* to_hex_string(const void* src, long unsigned int sz)
+{
+ static const char lookup[] =
+ {
+ '0', '1', '2', '3',
+ '4', '5', '6', '7',
+ '8', '9', 'a', 'b',
+ 'c', 'd', 'e', 'f'
+ };
+
+ const char* source;
+ char* result;
+ long unsigned int i;
+
+ result = NULL;
+ if (src && sz)
+ {
+ source = (const char*)src;
+ result = (char*)malloc(sz * 2 + 1);
+ if (result)
+ {
+ result[sz * 2] = 0;
+ for (i = 0; i < sz; ++i)
+ {
+ result[i * 2] = lookup[(source[i] & 0xf0) >> 4];
+ result[i * 2 + 1] = lookup[source[i] & 0x0f];
+ }
+ }
+ }
+ return result;
+}