#include <stdio.h>
#include <memory.h>

#define BEGIN_HEX 0	/*Предполагаем, что встретили начало записи 16-ричного числа*/
#define HEX 1		/*Подтвердили это*/
#define NUMBER 2	/*В значащей части записи 16-ричного числа*/
#define STRING 3	/*Если аргумент оказался произвольной строкой*/
#define START_PARSING 4

int htoi(char s[]);

int main(void){
	int i;
	
	i = htoi("0x9");
	printf("%d\n", i);
	return 0;
}

int htoi(char s[]){
	int res;
	int i;
	int state;
	
	i = res = 0;
	state = START_PARSING;
	while(s[i] != '\0'){
		if(s[i] == '0')
			if(state == START_PARSING)
				state == BEGIN_HEX;
			else
				state == STRING;
		else if(s[i] == 'x')
			if(state == BEGIN_HEX)
				state == HEX;
			else
				state = STRING;
		else if(state == HEX){	/*Разбор 16-ричного числа*/
			if((s[i] >= '0' && s[i] <= '9' ) || (s[i] >= 'A' && s[i] <= 'F'))
				res = res*16 + (s[i] - '0');
			else
				state = STRING;
		}
		i++;	
	}
}