#include <stdio.h>
#include <memory.h>
#define BEGIN_HEX 0 /*Íà÷àëî çàïèñè 16-ðè÷íîãî ÷èñëà*/
#define HEX 1 /*Òî÷íî èçâåñòíî, ÷òî ýòî 16-ðè÷íîå ÷èñëî*/
#define NUMBER 2 /* çíà÷àùåé ÷àñòè 16-ðè÷íîãî ÷èñëà*/
#define STRING 3 /*Åñëè ïåðåäàíî íå ÷èñëî, à ëþáàÿ ñòðîêà*/
#define START_PARSING 4
int htoi(char s[]);
int main(void){
int i;
/*0x1F = 31*/
/*0xAF = 175*/
i = htoi("0xaf");
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; printf("state = BEGIN_HEX\n");}
else
{state == STRING; printf("state = STRING1\n"); }
else if(s[i] == 'x')
if(state == BEGIN_HEX)
{state = HEX; printf("state = HEX\n");}
else
{state = STRING; printf("state = STRING2\n");}
else if(state == HEX){ /*Íà÷èíàåì ðàçáîð 16-ðè÷íîãî ÷èñëà*/
if(s[i] >= '0' && s[i] <= '9' ){
res = res*16 + (s[i] - '0');
printf("s[i] = %d\n", s[i]);
printf("s[i] - 0 = %d\n", s[i] - '0');
}else if(s[i] >= 'a' && s[i] <= 'f'){
res = res*16 + (s[i] - 'a') + 10;
printf("s[i] = %d\n", s[i]);
printf("s[i] - 0 = %d\n", s[i] - 'a' + 10);
}else{
state = STRING;
printf("state = STRING");
}
}
i++;
}
return res;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KCiNkZWZpbmUgQkVHSU5fSEVYIDAJLyrDjcOgw7fDoMOrw64gw6fDoMOvw6jDscOoIDE2LcOww6jDt8Otw67Do8OuIMO3w6jDscOrw6AqLwojZGVmaW5lIEhFWCAxCQkvKsOSw67Dt8Otw64gw6jDp8Oiw6XDscOyw63Driwgw7fDssOuIMO9w7LDriAxNi3DsMOow7fDrcOuw6Ugw7fDqMOxw6vDriovCiNkZWZpbmUgTlVNQkVSIDIJLyrDgiDDp8Otw6DDt8Ogw7nDpcOpIMO3w6DDscOyw6ggMTYtw7DDqMO3w63DrsOjw64gw7fDqMOxw6vDoCovCiNkZWZpbmUgU1RSSU5HIDMJLyrDhcOxw6vDqCDDr8Olw7DDpcOkw6DDrcOuIMOtw6Ugw7fDqMOxw6vDriwgw6Agw6vDvsOhw6DDvyDDscOyw7DDrsOqw6AqLwojZGVmaW5lIFNUQVJUX1BBUlNJTkcgNAoKaW50IGh0b2koY2hhciBzW10pOwoKaW50IG1haW4odm9pZCl7CglpbnQgaTsKCQoJLyoweDFGID0gMzEqLwoJLyoweEFGID0gMTc1Ki8KCWkgPSBodG9pKCIweGFmIik7CglwcmludGYoIiVkXG4iLCBpKTsKCXJldHVybiAwOwp9CgppbnQgaHRvaShjaGFyIHNbXSl7CglpbnQgcmVzOwoJaW50IGk7CglpbnQgc3RhdGU7CgkKCWkgPSByZXMgPSAwOwoJc3RhdGUgPSBTVEFSVF9QQVJTSU5HOwoJd2hpbGUoc1tpXSAhPSAnXDAnKXsKCQlpZihzW2ldID09ICcwJykKCQkJaWYoc3RhdGUgPT0gU1RBUlRfUEFSU0lORykKCQkJCXtzdGF0ZSA9IEJFR0lOX0hFWDsgcHJpbnRmKCJzdGF0ZSA9IEJFR0lOX0hFWFxuIik7fQoJCQllbHNlCgkJCQl7c3RhdGUgPT0gU1RSSU5HOyBwcmludGYoInN0YXRlID0gU1RSSU5HMVxuIik7IH0KCQllbHNlIGlmKHNbaV0gPT0gJ3gnKQoJCQlpZihzdGF0ZSA9PSBCRUdJTl9IRVgpCgkJCQl7c3RhdGUgPSBIRVg7IHByaW50Zigic3RhdGUgPSBIRVhcbiIpO30KCQkJZWxzZQoJCQkJe3N0YXRlID0gU1RSSU5HOyBwcmludGYoInN0YXRlID0gU1RSSU5HMlxuIik7fQoJCWVsc2UgaWYoc3RhdGUgPT0gSEVYKXsJLyrDjcOgw7fDqMOtw6DDpcOsIMOww6DDp8Ohw67DsCAxNi3DsMOow7fDrcOuw6PDriDDt8Oow7HDq8OgKi8KCQkJaWYoc1tpXSA+PSAnMCcgJiYgc1tpXSA8PSAnOScgKXsKCQkJCXJlcyA9IHJlcyoxNiArIChzW2ldIC0gJzAnKTsKCQkJCXByaW50Zigic1tpXSA9ICVkXG4iLCBzW2ldKTsKCQkJCXByaW50Zigic1tpXSAtIDAgPSAlZFxuIiwgc1tpXSAtICcwJyk7CgkJCX1lbHNlIGlmKHNbaV0gPj0gJ2EnICYmIHNbaV0gPD0gJ2YnKXsKCQkJCXJlcyA9IHJlcyoxNiArIChzW2ldIC0gJ2EnKSArIDEwOwoJCQkJcHJpbnRmKCJzW2ldID0gJWRcbiIsIHNbaV0pOwoJCQkJcHJpbnRmKCJzW2ldIC0gMCA9ICVkXG4iLCBzW2ldIC0gJ2EnICsgMTApOwoJCQl9ZWxzZXsKCQkJCXN0YXRlID0gU1RSSU5HOwoJCQkJcHJpbnRmKCJzdGF0ZSA9IFNUUklORyIpOwoJCQl9CgkJfQoJCWkrKzsJCgl9CgkKCXJldHVybiByZXM7Cn0=