#include "general.h"
#include "hex_utils.h"
char hex_digit(const uint8_t value)
{
char digit = (char)value;
if (value > 9U)
digit += 'A' - '0' - 10U;
digit += '0';
return digit;
}
char *hexify(char *const hex, const void *const buf, const size_t size)
{
char *dst = hex;
const uint8_t *const src = buf;
for (size_t idx = 0; idx < size; ++idx) {
*dst++ = hex_digit(src[idx] >> 4U);
*dst++ = hex_digit(src[idx] & 0xfU);
}
*dst = 0;
return hex;
}
uint8_t unhex_digit(const char hex)
{
uint8_t tmp = hex - '0';
if (tmp > 9U)
tmp -= 'A' - '0' - 10U;
if (tmp > 16U)
tmp -= 'a' - 'A';
return tmp;
}
char *unhexify(void *const buf, const char *hex, const size_t size)
{
uint8_t *const dst = buf;
for (size_t idx = 0; idx < size; ++idx, hex += 2U)
dst[idx] = (unhex_digit(hex[0]) << 4U) | unhex_digit(hex[1]);
return buf;
}