fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int is_digit(char ch)
  5. {
  6. if ((ch >= '0' && ch <= '9') ||
  7. (ch >= 'A' && ch <= 'F') ||
  8. (ch >= 'a' && ch <= 'f'))
  9. return 1;
  10. else
  11. return 0;
  12. }
  13.  
  14. unsigned char htoi_digit(char ch)
  15. {
  16. if (ch >= '0' && ch <= '9')
  17. return ch - '0';
  18. else if (ch >= 'A' && ch <= 'F')
  19. return ch - ('A' - 0xA);
  20. else if (ch >= 'a' && ch <= 'f')
  21. return ch - ('a' - 0xA);
  22. else
  23. abort();
  24. }
  25.  
  26. unsigned long htoi(char *str)
  27. {
  28. unsigned long res = 0;
  29. unsigned long mul = 0x1;
  30. char *p;
  31.  
  32. for (p = str; *p; p++);
  33. for (p--; is_digit(*p); p--) {
  34. res += htoi_digit(*p) * mul;
  35. mul *= 0x10;
  36. }
  37. return res;
  38. }
  39.  
  40. int main(void)
  41. {
  42. unsigned long i = htoi("0x9FA42D");
  43. printf("0x%.8lx\n", i);
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
0x009fa42d