blob: 40818958d3c28a4c7cb97710adbda4b4575f3685 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <ctype.h>
unsigned long long int strtoull(const char *nptr, char **endptr, int base)
{
long long int v=0;
while(isspace(*nptr)) ++nptr;
if (*nptr == '+') ++nptr;
if (!base) {
if (*nptr=='0') {
base=8;
if ((*(nptr+1)=='x')||(*(nptr+1)=='X')) {
nptr+=2;
base=16;
}
}
else
base=10;
}
while(*nptr) {
register unsigned char c=*nptr;
c=(c>='a'?c-'a'+10:c>='A'?c-'A'+10:c-'0');
if (c>=base) break;
v=v*base+c;
++nptr;
}
if (endptr) *endptr=(char *)nptr;
return v;
}
|