strtoll.c 629 B

1234567891011121314151617181920212223242526272829
  1. #include <stdlib.h>
  2. // assumes endptr != NULL
  3. // doesn't check for sign
  4. // doesn't check for base-prefix
  5. long long int strtoll(const char *nptr, char **endptr, int base) {
  6. long long val = 0;
  7. for (; *nptr; nptr++) {
  8. int v = *nptr;
  9. if ('0' <= v && v <= '9') {
  10. v -= '0';
  11. } else if ('A' <= v && v <= 'Z') {
  12. v -= 'A' - 10;
  13. } else if ('a' <= v && v <= 'z') {
  14. v -= 'a' - 10;
  15. } else {
  16. break;
  17. }
  18. if (v >= base) {
  19. break;
  20. }
  21. val = val * base + v;
  22. }
  23. *endptr = (char*)nptr;
  24. return val;
  25. }