#include <stdio.h>
#include <stdlib.h>
int is_digit(char ch)
{
if ((ch >= '0' && ch <= '9') ||
(ch >= 'A' && ch <= 'F') ||
(ch >= 'a' && ch <= 'f'))
return 1;
else
return 0;
}
unsigned char htoi_digit(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
else if (ch >= 'A' && ch <= 'F')
return ch - ('A' - 0xA);
else if (ch >= 'a' && ch <= 'f')
return ch - ('a' - 0xA);
else
}
unsigned long htoi(char *str)
{
unsigned long res = 0;
unsigned long mul = 0x1;
char *p;
for (p = str; *p; p++);
for (p--; is_digit(*p); p--) {
res += htoi_digit(*p) * mul;
mul *= 0x10;
}
return res;
}
int main(void)
{
unsigned long i = htoi("0x9FA42D");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBpc19kaWdpdChjaGFyIGNoKQp7CglpZiAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8CgkJKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CgkJKGNoID49ICdhJyAmJiBjaCA8PSAnZicpKQoJCXJldHVybiAxOwoJZWxzZQoJCXJldHVybiAwOwp9Cgp1bnNpZ25lZCBjaGFyIGh0b2lfZGlnaXQoY2hhciBjaCkKewoJaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCgkJcmV0dXJuIGNoIC0gJzAnOwoJZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykKCQlyZXR1cm4gY2ggLSAoJ0EnIC0gMHhBKTsKCWVsc2UgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpCgkJcmV0dXJuIGNoIC0gKCdhJyAtIDB4QSk7CgllbHNlCgkJYWJvcnQoKTsKfQoKdW5zaWduZWQgbG9uZyBodG9pKGNoYXIgKnN0cikKewoJdW5zaWduZWQgbG9uZyByZXMgPSAwOwoJdW5zaWduZWQgbG9uZyBtdWwgPSAweDE7CgljaGFyICpwOwoKCWZvciAocCA9IHN0cjsgKnA7IHArKyk7Cglmb3IgKHAtLTsgaXNfZGlnaXQoKnApOyBwLS0pIHsKCQlyZXMgKz0gaHRvaV9kaWdpdCgqcCkgKiBtdWw7CgkJbXVsICo9IDB4MTA7Cgl9CglyZXR1cm4gcmVzOwp9CgppbnQgbWFpbih2b2lkKQp7Cgl1bnNpZ25lZCBsb25nIGkgPSBodG9pKCIweDlGQTQyRCIpOwoJcHJpbnRmKCIweCUuOGx4XG4iLCBpKTsKCXJldHVybiAwOwp9Cg==