#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;
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; printf("state = BEGIN_HEX\n");}
else
{state == STRING; printf("state = STRING\n"); }
else if(s[i] == 'x')
if(state == BEGIN_HEX)
{state == HEX; printf("state = HEX\n");}
else
{state = STRING; printf("state = STRING\n");}
else if(state == HEX){ /*Íà÷èíàåì ðàçáîð 16-ðè÷íîãî ÷èñëà*/
if((s[i] >= '0' && s[i] <= '9' ) || (s[i] >= 'A' && s[i] <= 'F')){
res = res*16 + (s[i] - '0');
printf("s[i] = %d\n", s[i]);
}else{
state = STRING;
printf("state = STRING");
}
}
i++;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KCiNkZWZpbmUgQkVHSU5fSEVYIDAJLyrDjcOgw7fDoMOrw64gw6fDoMOvw6jDscOoIDE2LcOww6jDt8Otw67Do8OuIMO3w6jDscOrw6AqLwojZGVmaW5lIEhFWCAxCQkvKsOSw67Dt8Otw64gw6jDp8Oiw6XDscOyw63Driwgw7fDssOuIMO9w7LDriAxNi3DsMOow7fDrcOuw6Ugw7fDqMOxw6vDriovCiNkZWZpbmUgTlVNQkVSIDIJLyrDgiDDp8Otw6DDt8Ogw7nDpcOpIMO3w6DDscOyw6ggMTYtw7DDqMO3w63DrsOjw64gw7fDqMOxw6vDoCovCiNkZWZpbmUgU1RSSU5HIDMJLyrDhcOxw6vDqCDDr8Olw7DDpcOkw6DDrcOuIMOtw6Ugw7fDqMOxw6vDriwgw6Agw6vDvsOhw6DDvyDDscOyw7DDrsOqw6AqLwojZGVmaW5lIFNUQVJUX1BBUlNJTkcgNAoKaW50IGh0b2koY2hhciBzW10pOwoKaW50IG1haW4odm9pZCl7CglpbnQgaTsKCQoJaSA9IGh0b2koIjB4OSIpOwoJcHJpbnRmKCIlZFxuIiwgaSk7CglyZXR1cm4gMDsKfQoKaW50IGh0b2koY2hhciBzW10pewoJaW50IHJlczsKCWludCBpOwoJaW50IHN0YXRlOwoJCglpID0gcmVzID0gMDsKCXN0YXRlID0gU1RBUlRfUEFSU0lORzsKCXdoaWxlKHNbaV0gIT0gJ1wwJyl7CgkJaWYoc1tpXSA9PSAnMCcpCgkJCWlmKHN0YXRlID09IFNUQVJUX1BBUlNJTkcpCgkJCQl7c3RhdGUgPT0gQkVHSU5fSEVYOyBwcmludGYoInN0YXRlID0gQkVHSU5fSEVYXG4iKTt9CgkJCWVsc2UKCQkJCXtzdGF0ZSA9PSBTVFJJTkc7IHByaW50Zigic3RhdGUgPSBTVFJJTkdcbiIpOyB9CgkJZWxzZSBpZihzW2ldID09ICd4JykKCQkJaWYoc3RhdGUgPT0gQkVHSU5fSEVYKQoJCQkJe3N0YXRlID09IEhFWDsgcHJpbnRmKCJzdGF0ZSA9IEhFWFxuIik7fQoJCQllbHNlCgkJCQl7c3RhdGUgPSBTVFJJTkc7IHByaW50Zigic3RhdGUgPSBTVFJJTkdcbiIpO30KCQllbHNlIGlmKHN0YXRlID09IEhFWCl7CS8qw43DoMO3w6jDrcOgw6XDrCDDsMOgw6fDocOuw7AgMTYtw7DDqMO3w63DrsOjw64gw7fDqMOxw6vDoCovCgkJCWlmKChzW2ldID49ICcwJyAmJiBzW2ldIDw9ICc5JyApIHx8IChzW2ldID49ICdBJyAmJiBzW2ldIDw9ICdGJykpewoJCQkJcmVzID0gcmVzKjE2ICsgKHNbaV0gLSAnMCcpOwoJCQkJcHJpbnRmKCJzW2ldID0gJWRcbiIsIHNbaV0pOwoJCQl9ZWxzZXsKCQkJCXN0YXRlID0gU1RSSU5HOwoJCQkJcHJpbnRmKCJzdGF0ZSA9IFNUUklORyIpOwoJCQl9CgkJfQoJCWkrKzsJCgl9Cn0=