From 9f90f31291c64088f5baedcda4e03759a448ce53 Mon Sep 17 00:00:00 2001 From: Toon Stegen <tstegen@nalys-group.com> Date: Wed, 1 Aug 2018 18:09:41 +0200 Subject: [PATCH] sys/fmt: add function for converting hex byte --- sys/fmt/fmt.c | 7 ++++++- sys/include/fmt.h | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/sys/fmt/fmt.c b/sys/fmt/fmt.c index 5ea21e8b8e..0c7fa2c7f5 100644 --- a/sys/fmt/fmt.c +++ b/sys/fmt/fmt.c @@ -132,6 +132,11 @@ static uint8_t _hex_nib(uint8_t nib) return _byte_mod25((nib & 0x1f) + 9); } +uint8_t fmt_hex_byte(const char *hex) +{ + return (_hex_nib(hex[0]) << 4) | _hex_nib(hex[1]); +} + size_t fmt_hex_bytes(uint8_t *out, const char *hex) { size_t len = fmt_strlen(hex); @@ -143,7 +148,7 @@ size_t fmt_hex_bytes(uint8_t *out, const char *hex) size_t final_len = len >> 1; for (size_t i = 0, j = 0; j < final_len; i += 2, j++) { - out[j] = (_hex_nib(hex[i]) << 4) | _hex_nib(hex[i+1]); + out[j] = fmt_hex_byte(hex + i); } return final_len; diff --git a/sys/include/fmt.h b/sys/include/fmt.h index 229f939611..7176494d30 100644 --- a/sys/include/fmt.h +++ b/sys/include/fmt.h @@ -91,6 +91,17 @@ size_t fmt_bytes_hex(char *out, const uint8_t *ptr, size_t n); */ size_t fmt_bytes_hex_reverse(char *out, const uint8_t *ptr, size_t n); +/** + * @brief Converts a sequence of two hex characters to a byte + * + * The hex characters sequence must contain valid hexadecimal characters + * otherwise the result is undefined. + * + * @param[in] hex Pointer to input buffer + * @returns byte based on hex string + */ +uint8_t fmt_hex_byte(const char *hex); + /** * @brief Converts a sequence of hex bytes to an array of bytes * -- GitLab