fork download
  1. #include <stdio.h>
  2. #include <memory.h>
  3.  
  4. #define BEGIN_HEX 0 /*Предполагаем, что встретили начало записи 16-ричного числа*/
  5. #define HEX 1 /*Подтвердили это*/
  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. i = htoi("0x9");
  16. printf("%d\n", i);
  17. return 0;
  18. }
  19.  
  20. int htoi(char s[]){
  21. int res;
  22. int i;
  23. int state;
  24.  
  25. i = res = 0;
  26. state = START_PARSING;
  27. while(s[i] != '\0'){
  28. if(s[i] == '0')
  29. if(state == START_PARSING)
  30. state == BEGIN_HEX;
  31. else
  32. state == STRING;
  33. else if(s[i] == 'x')
  34. if(state == BEGIN_HEX)
  35. state == HEX;
  36. else
  37. state = STRING;
  38. else if(state == HEX){ /*Разбор 16-ричного числа*/
  39. if((s[i] >= '0' && s[i] <= '9' ) || (s[i] >= 'A' && s[i] <= 'F'))
  40. res = res*16 + (s[i] - '0');
  41. else
  42. state = STRING;
  43. }
  44. i++;
  45. }
  46. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
0