5 #include "sw/device/lib/testing/hexstr.h"
7 static const char hex[] =
"0123456789abcdef";
9 status_t hexstr_encode(
char *dst,
size_t dst_size,
const void *src,
11 const uint8_t *data = (
const uint8_t *)src;
12 for (; src_size > 0; --src_size, ++data) {
14 return INVALID_ARGUMENT();
16 *dst++ = hex[*data >> 4];
17 *dst++ = hex[*data & 15];
24 static status_t decode_nibble(
char ch) {
27 return INVALID_ARGUMENT();
29 int nibble = (ch >=
'0' && ch <=
'9') ? ch -
'0'
30 : (ch >=
'A' && ch <=
'F') ? ch -
'A' + 10
31 : (ch >=
'a' && ch <=
'f') ? ch -
'a' + 10
35 return INVALID_ARGUMENT();
37 return OK_STATUS(nibble);
40 status_t hexstr_decode(
void *dst,
size_t dst_size,
const char *src) {
41 uint8_t *data = (uint8_t *)dst;
45 return INVALID_ARGUMENT();
48 uint8_t nibble = (uint8_t)TRY(decode_nibble(*src++));
49 *data = (uint8_t)(nibble << 4);
50 nibble = (uint8_t)TRY(decode_nibble(*src++));