int parse_hex_string(char *src, uint8_t *dst, uint32_t *size) { char *c; uint32_t len, i; /* Check input parameters */ if ((src == NULL) || (dst == NULL) || (size == NULL) || (*size == 0)) return -1; len = strlen(src); if (((len & 3) != 0) || (len > (*size) * 2)) return -1; *size = len / 2; for (c = src; *c != 0; c++) { if ((((*c) >= '0') && ((*c) <= '9')) || (((*c) >= 'A') && ((*c) <= 'F')) || (((*c) >= 'a') && ((*c) <= 'f'))) continue; return -1; } /* Convert chars to bytes */ for (i = 0; i < *size; i++) dst[i] = get_hex_val(src[2 * i]) * 16 + get_hex_val(src[2 * i + 1]); return 0; }
//returns the value of the first two digits //of a hexadecimal string unsigned char get_char_from_hex_str(char *string) { unsigned char hex_num; //error checking, even though it means we're redundantly //calling get_hex_val if (!is_hex_digit(string[0])) { exit(-2); } if (!is_hex_digit(string[1])) { exit(-2); } hex_num = 16 * get_hex_val(string[0]); hex_num += get_hex_val(string[1]); return hex_num; }