/* Octal Alpha to Integer conversion */ /* ATT. ! max value: 0xfffffffe ( -1 is returned in case of error ) */ int atox(string) char *string; { int i; int len = 0; int n = 0; unsigned char digit; if (*string != '0' || (*(string + 1) != 'x' && *(string + 1) != 'X') ) return -1; for (i = 2; i < 11 && *(string + i ) != '\0'; i++) ++len; if (len > 8) return -1; for (i = 2; i < len + 2 ; i++){ switch ( *(string + i) ){ case '0': digit = 0x0; break; case '1': digit = 0x1; break; case '2': digit = 0x2; break; case '3': digit = 0x3; break; case '4': digit = 0x4; break; case '5': digit = 0x5; break; case '6': digit = 0x6; break; case '7': digit = 0x7; break; case '8': digit = 0x8; break; case '9': digit = 0x9; break; case 'a': case 'A': digit = 0xa; break; case 'b': case 'B': digit = 0xb; break; case 'c': case 'C': digit = 0xc; break; case 'd': case 'D': digit = 0xd; break; case 'e': case 'E': digit = 0xe; break; case 'f': case 'F': digit = 0xf; break; default : return -1; } n |= ( digit << (len + 1 - i) * 4 ); } return n; }