#include #include #include #include static const char hx_chars[] = "0123456789ABCDEF" ; char* uc_hex_encode(const uint8_t *in, size_t len, char *out) { unsigned int i, t, hn, ln; for (i = 0, t = 0; i < len; ++i,t+=2) { hn = (in[i] & 0xF0) >> 4 ; ln = in[i] & 0x0F ; out[t] = hx_chars[hn]; out[t+1] = hx_chars[ln]; } out[t] = 0; return out; } char* uc_hex_encode_delim(const uint8_t *in, size_t inlen, char *out, int outlen, char *delim) { unsigned int i; char *outp = out; out[0] = 0; for (i = 0; i < inlen && outlen > 0; i++) { int rc = snprintf(outp, outlen, "%02X%s", in[i], delim); if (rc <= 0) break; outp += rc; outlen -= rc; } return outp; } /* ASCII only */ static inline int char_to_bin(char c) { if (c >='0' && c <='9') return c - '0'; else if (c >= 'A' && c <= 'F') return c - 'A' + 10; else if (c >= 'a' && c <= 'f') return c - 'a' + 10; return -1; } uint8_t* uc_hex_decode(const char *in, size_t maxlen,uint8_t *out) { size_t i, t; for (t = 0,i = 0; i + 1 < maxlen && in[i] && in[i + 1]; i+=2 , ++t) { int hn, ln; hn = char_to_bin(in[i]); ln = char_to_bin(in[i + 1]); if (hn == -1 || ln == -1) return NULL; out[t] = (hn << 4 ) | ln; } return &out[t]; }