| 1234567891011121314151617181920212223242526272829 |
- #include <stdlib.h>
- // assumes endptr != NULL
- // doesn't check for sign
- // doesn't check for base-prefix
- long long int strtoll(const char *nptr, char **endptr, int base) {
- long long val = 0;
- for (; *nptr; nptr++) {
- int v = *nptr;
- if ('0' <= v && v <= '9') {
- v -= '0';
- } else if ('A' <= v && v <= 'Z') {
- v -= 'A' - 10;
- } else if ('a' <= v && v <= 'z') {
- v -= 'a' - 10;
- } else {
- break;
- }
- if (v >= base) {
- break;
- }
- val = val * base + v;
- }
- *endptr = (char*)nptr;
- return val;
- }
|