fork download
  1. #include <stdio.h>
  2. #include <memory.h>
  3.  
  4. #define BEGIN_HEX 0 /*Íà÷àëî çàïèñè 16-ðè÷íîãî ÷èñëà*/
  5. #define HEX 1 /*Òî÷íî èçâåñòíî, ÷òî ýòî 16-ðè÷íîå ÷èñëî*/
  6. #define NUMBER 2 /* çíà÷àùåé ÷àñòè 16-ðè÷íîãî ÷èñëà*/
  7. #define STRING 3 /*Åñëè ïåðåäàíî íå ÷èñëî, à ëþáàÿ ñòðîêà*/
  8. #define START_PARSING 4
  9.  
  10. int htoi(char s[]);
  11.  
  12. int main(void){
  13. int i;
  14.  
  15. /*0x1F = 31*/
  16. i = htoi("0x1f");
  17. printf("%d\n", i);
  18. return 0;
  19. }
  20.  
  21. int htoi(char s[]){
  22. int res;
  23. int i;
  24. int state;
  25.  
  26. i = res = 0;
  27. state = START_PARSING;
  28. while(s[i] != '\0'){
  29. if(s[i] == '0')
  30. if(state == START_PARSING)
  31. {state = BEGIN_HEX; printf("state = BEGIN_HEX\n");}
  32. else
  33. {state == STRING; printf("state = STRING1\n"); }
  34. else if(s[i] == 'x')
  35. if(state == BEGIN_HEX)
  36. {state = HEX; printf("state = HEX\n");}
  37. else
  38. {state = STRING; printf("state = STRING2\n");}
  39. else if(state == HEX){ /*Íà÷èíàåì ðàçáîð 16-ðè÷íîãî ÷èñëà*/
  40. if((s[i] >= '0' && s[i] <= '9' ) || (s[i] >= 'a' && s[i] <= 'f')){
  41. res = res*16 + (s[i] - '0');
  42. printf("s[i] = %d\n", s[i]);
  43. printf("s[i] - 0 = %d\n", s[i] - '0');
  44. }else{
  45. state = STRING;
  46. printf("state = STRING");
  47. }
  48. }
  49. i++;
  50. }
  51.  
  52. return res;
  53. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
state = BEGIN_HEX
state = HEX
s[i] = 49
s[i] - 0 = 1
s[i] = 102
s[i] - 0 = 54
70