+int isxdigit(int c) +{
- return isdigit(c) || (tolower(c)>= 'a' && tolower(c) <= 'z');
+}
Shouldn't this be
return isdigit(c) || (tolower(c)>= 'a' && tolower(c) <= 'f');
jep it should.. but why not : return isdigit(c) || c>= 'a' && c <= 'f' || c>= 'A' && c <= 'F' );
For one thing, because it doesn't compile. Also, the compiler will generate equivalent code (also wrt size and speed).
it might be even faster if you do return isdigit(c) || (c & ~0x20)>= 'A' && (c & ~0x20) <= 'F' );
Or we could write it as
return ((c >= '0') + (c > '9') + (c >= 'a') + (c > 'f') + (c >= 'A') + (c > 'F')) & 1;
which might be even faster!
You cannot tell without measuring, and it doesn't matter anyway: the most important things to optimise for are readability and maintainability (and those two are very much related).
Segher