Well i took this lookup table code form somewhere and modified it a bit
Code:
signed short parseHex(char *value)
{
int i,j;
typedef struct
{
char chr;
signed short value;
} CHexMap;
int HexMapL = 16;
CHexMap HexMap[] =
{
{'0', 0}, {'1', 1}, {'2', 2}, {'3', 3},
{'4', 4}, {'5', 5}, {'6', 6}, {'7', 7},
{'8', 8}, {'9', 9}, {'A', 10}, {'B', 11},
{'C', 12}, {'D', 13}, {'E', 14}, {'F', 15}
};
signed short result = 0;
char *s = value;
for (j = 0; j < 4; j++)
{
result << 4;
for (i = 0; i < HexMapL; i++)
{
if (*s == HexMap[i].chr)
{
result |= HexMap[i].value;
break;
}
}
s++;
}
return result;
}