#include <stdlib.h>
unsigned long long strtoull(register const char * __restrict__ nptr,
char ** __restrict__ endptr, int base);
The strtoull() function converts nptr, a character string, to an unsigned long long value.
The function decomposes the entire string into three parts:
If the base is greater than zero, the subject sequence contains decimal digits and letters, possibly preceded by either a plus or a minus sign. The letters a (or A) through z (or Z) represent values from 10 through 36, but only those letters whose value is less than the value of the base are allowed. The function stops reading the string at the first character that it cannot recognize as part of a number. This character can be the first numeric character greater than or equal to the base. The strtoull() function sets endptr to point to the end of the resulting output string if a conversion is performed and provided that endptr is not a NULL pointer.
>>-+-------------+--+-----+--+----+--+--------+---------------->< '-white space-' +- + -+ +-0--+ '-digits-' '- - -' +-0x-+ '-0X-'
If base is in the range of 2-36, it becomes the base of the number. If base is 0, the prefix determines the base (8, 16 or 10): the prefix 0 means base 8; the prefix 0x or 0X means base 16; using any other digit without a prefix means decimal.
The pointer to the converted characters, even if conversion was unsuccessful, is stored in the object pointed to by endptr, if endptr is not a NULL pointer.
If successful, strtoull() returns the converted unsigned long long value, represented in the string.
If unsuccessful, strtoull() returns 0 if no conversion could be performed. If the correct value is outside the range of representable values, strtoull() returns ULLONG_MAX (ULONGLONG_MAX). If the value of base is not supported, strtoull() returns 0.