Предполагая, что ваши данные верны (ASCII, действительные шестнадцатеричные символы, правильная длина), вы должны иметь возможность сделать что-то вроде.
unsigned char *mkBytArray (char *s, int *len) {
unsigned char *ret;
*len = 0;
if (*s == '\0') return NULL;
ret = malloc (strlen (s) / 2);
if (ret == NULL) return NULL;
while (*s != '\0') {
if (*s > '9')
ret[*len] = ((tolower(*s) - 'a') + 10) << 4;
else
ret[*len] = (*s - '0') << 4;
s++;
if (*s > '9')
ret[*len] |= tolower(*s) - 'a' + 10;
else
ret[*len] |= *s - '0';
s++;
*len++;
}
return ret;
}
Это даст вам массив неподписанных символов, которые вы несете ответственность за освобождение. Он также установит переменную len
равной размеру, чтобы вы могли легко ее обработать.
Причина, по которой он должен быть ASCII, заключается в том, что ISO предписывает только то, что числовые символы являются последовательными. Все ставки на альфы отменены.