Обычно бывает проще сразу strtol() или strtoul() использовать чем с
каждой буквой отдельно разбираться. Но можно и так:
int t = ASCIIchar;
if( (t >= '0') && (t <= '9') )
return t - '0';
else if( t >= 'A' && t <= 'F' )
return t - 'A' + 10;
else if( t >= 'a' && t <= 'f' )
return t - 'a' + 10;
else
return -1;;
Взирая на нынешнее состояние отечества моего с таковым оком, каковое может иметь человек, воспитанный по строгим древним правилам, ... не могу я не дивиться, в сколь краткое время повредились повсюдно нравы в России. (с) кн. М.М. Щербатов.