Skip to content
Snippets Groups Projects
Select Git revision
  • 32d7cf6e441660caed00620309d1faa4b7df5dd4
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

strtoll.c

Blame
  • strtoll.c 629 B
    #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;
    }