#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*/
i = htoi("0x1f");
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' ) || (s[i] >= 'a' && s[i] <= 'f')){
res = res*16 + (s[i] - '0');
printf("s[i] = %d\n", s[i]);
printf("s[i] - 0 = %d\n", s[i] - '0');
}else{
state = STRING;
printf("state = STRING");
}
}
i++;
}
return res;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KCiNkZWZpbmUgQkVHSU5fSEVYIDAJLyrDjcOgw7fDoMOrw64gw6fDoMOvw6jDscOoIDE2LcOww6jDt8Otw67Do8OuIMO3w6jDscOrw6AqLwojZGVmaW5lIEhFWCAxCQkvKsOSw67Dt8Otw64gw6jDp8Oiw6XDscOyw63Driwgw7fDssOuIMO9w7LDriAxNi3DsMOow7fDrcOuw6Ugw7fDqMOxw6vDriovCiNkZWZpbmUgTlVNQkVSIDIJLyrDgiDDp8Otw6DDt8Ogw7nDpcOpIMO3w6DDscOyw6ggMTYtw7DDqMO3w63DrsOjw64gw7fDqMOxw6vDoCovCiNkZWZpbmUgU1RSSU5HIDMJLyrDhcOxw6vDqCDDr8Olw7DDpcOkw6DDrcOuIMOtw6Ugw7fDqMOxw6vDriwgw6Agw6vDvsOhw6DDvyDDscOyw7DDrsOqw6AqLwojZGVmaW5lIFNUQVJUX1BBUlNJTkcgNAoKaW50IGh0b2koY2hhciBzW10pOwoKaW50IG1haW4odm9pZCl7CglpbnQgaTsKCQoJLyoweDFGID0gMzEqLwoJaSA9IGh0b2koIjB4MWYiKTsKCXByaW50ZigiJWRcbiIsIGkpOwoJcmV0dXJuIDA7Cn0KCmludCBodG9pKGNoYXIgc1tdKXsKCWludCByZXM7CglpbnQgaTsKCWludCBzdGF0ZTsKCQoJaSA9IHJlcyA9IDA7CglzdGF0ZSA9IFNUQVJUX1BBUlNJTkc7Cgl3aGlsZShzW2ldICE9ICdcMCcpewoJCWlmKHNbaV0gPT0gJzAnKQoJCQlpZihzdGF0ZSA9PSBTVEFSVF9QQVJTSU5HKQoJCQkJe3N0YXRlID0gQkVHSU5fSEVYOyBwcmludGYoInN0YXRlID0gQkVHSU5fSEVYXG4iKTt9CgkJCWVsc2UKCQkJCXtzdGF0ZSA9PSBTVFJJTkc7IHByaW50Zigic3RhdGUgPSBTVFJJTkcxXG4iKTsgfQoJCWVsc2UgaWYoc1tpXSA9PSAneCcpCgkJCWlmKHN0YXRlID09IEJFR0lOX0hFWCkKCQkJCXtzdGF0ZSA9IEhFWDsgcHJpbnRmKCJzdGF0ZSA9IEhFWFxuIik7fQoJCQllbHNlCgkJCQl7c3RhdGUgPSBTVFJJTkc7IHByaW50Zigic3RhdGUgPSBTVFJJTkcyXG4iKTt9CgkJZWxzZSBpZihzdGF0ZSA9PSBIRVgpewkvKsONw6DDt8Oow63DoMOlw6wgw7DDoMOnw6HDrsOwIDE2LcOww6jDt8Otw67Do8OuIMO3w6jDscOrw6AqLwoJCQlpZigoc1tpXSA+PSAnMCcgJiYgc1tpXSA8PSAnOScgKSB8fCAoc1tpXSA+PSAnYScgJiYgc1tpXSA8PSAnZicpKXsKCQkJCXJlcyA9IHJlcyoxNiArIChzW2ldIC0gJzAnKTsKCQkJCXByaW50Zigic1tpXSA9ICVkXG4iLCBzW2ldKTsKCQkJCXByaW50Zigic1tpXSAtIDAgPSAlZFxuIiwgc1tpXSAtICcwJyk7CgkJCX1lbHNlewoJCQkJc3RhdGUgPSBTVFJJTkc7CgkJCQlwcmludGYoInN0YXRlID0gU1RSSU5HIik7CgkJCX0KCQl9CgkJaSsrOwkKCX0KCQoJcmV0dXJuIHJlczsKfQ==