Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}