For example, I have a cstring \"E8 48 D8 FF FF 8B 0D\"
(including spaces) which needs to be converted into the equivalent unsigned char array {0xE8,0x48,0
You'll never convince me that this operation is a performance bottleneck. The efficient way is to make good use of your time by using the standard C library:
static unsigned char gethex(const char *s, char **endptr) {
assert(s);
while (isspace(*s)) s++;
assert(*s);
return strtoul(s, endptr, 16);
}
unsigned char *convert(const char *s, int *length) {
unsigned char *answer = malloc((strlen(s) + 1) / 3);
unsigned char *p;
for (p = answer; *s; p++)
*p = gethex(s, (char **)&s);
*length = p - answer;
return answer;
}
Compiled and tested. Works on your example.