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. /*0xAF = 175*/
  17. i = htoi("0xaf");
  18. printf("%d\n", i);
  19. return 0;
  20. }
  21.  
  22. int htoi(char s[]){
  23. int res;
  24. int i;
  25. int state;
  26.  
  27. i = res = 0;
  28. state = START_PARSING;
  29. while(s[i] != '\0'){
  30. if(s[i] == '0')
  31. if(state == START_PARSING)
  32. {state = BEGIN_HEX; printf("state = BEGIN_HEX\n");}
  33. else
  34. {state == STRING; printf("state = STRING1\n"); }
  35. else if(s[i] == 'x')
  36. if(state == BEGIN_HEX)
  37. {state = HEX; printf("state = HEX\n");}
  38. else
  39. {state = STRING; printf("state = STRING2\n");}
  40. else if(state == HEX){ /*Íà÷èíàåì ðàçáîð 16-ðè÷íîãî ÷èñëà*/
  41. if(s[i] >= '0' && s[i] <= '9' ){
  42. res = res*16 + (s[i] - '0');
  43. printf("s[i] = %d\n", s[i]);
  44. printf("s[i] - 0 = %d\n", s[i] - '0');
  45. }else if(s[i] >= 'a' && s[i] <= 'f'){
  46. res = res*16 + (s[i] - 'a') + 10;
  47. printf("s[i] = %d\n", s[i]);
  48. printf("s[i] - 0 = %d\n", s[i] - 'a' + 10);
  49. }else{
  50. state = STRING;
  51. printf("state = STRING");
  52. }
  53. }
  54. i++;
  55. }
  56.  
  57. return res;
  58. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
state = BEGIN_HEX
state = HEX
s[i] = 97
s[i] - 0 = 10
s[i] = 102
s[i] - 0 = 15
175