diff options
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/string.c | 27 | ||||
-rw-r--r-- | src/utils/string.h | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/utils/string.c b/src/utils/string.c index d05f0ec..1932d89 100644 --- a/src/utils/string.c +++ b/src/utils/string.c @@ -56,6 +56,33 @@ u64 decimalToU64(char const *str_begin, char const *str_end, bool *success) { return result; } +u64 hexToU64(char const *str_begin, char const *str_end, bool *success) { + u64 result = 0; + + if (str_end - str_begin > 16) { + *success = false; + return 0; + } + + while (str_begin < str_end) { + result *= 16; + if ('0' <= *str_begin && *str_begin <= '9') { + result += *str_begin - '0'; + } else if ('A' <= *str_begin && *str_begin <= 'F') { + result += *str_begin - 'A' + 10; + } else if ('a' <= *str_begin && *str_begin <= 'f') { + result += *str_begin - 'a' + 10; + } else { + *success = false; + return 0; + } + str_begin += 1; + } + + *success = true; + return result; +} + f128 numberToFloat(char const *str_begin, char const *str_end, bool *success) { f128 left = 0; f128 right = 0; diff --git a/src/utils/string.h b/src/utils/string.h index 878311f..dd2209c 100644 --- a/src/utils/string.h +++ b/src/utils/string.h @@ -13,6 +13,7 @@ size_t searchInStringArray(const char *array[], size_t array_size, const char *str, size_t str_size); u64 decimalToU64(char const*str_begin, char const*str_end, bool *success); +u64 hexToU64(char const*str_begin, char const*str_end, bool *success); f128 numberToFloat(char const*str_begin, char const*str_end, bool *success); char *u64ToString(u64 value); |