`unsigned long strtoul(const char *__nptr, char **__endptr, int __base)`

The strtoul() function converts the string in `nptr`

to an unsigned long value. The conversion is done according to the given base, which must be between 2 and 36 inclusive, or be the special value 0.

The string may begin with an arbitrary amount of white space (as determined by isspace()) followed by a single optional `'+'`

or `'-'`

sign. If `base`

is zero or 16, the string may then include a `"0x"`

prefix, and the number will be read in base 16; otherwise, a zero base is taken as 10 (decimal) unless the next character is `'0'`

, in which case it is taken as 8 (octal).

The remainder of the string is converted to an unsigned long value in the obvious manner, stopping at the first character which is not a valid digit in the given base. (In bases above 10, the letter `'A'`

in either upper or lower case represents 10, `'B'`

represents 11, and so forth, with `'Z'`

representing 35.)

If `endptr`

is not NULL, strtoul() stores the address of the first invalid character in `*endptr`

. If there were no digits at all, however, strtoul() stores the original value of `nptr`

in `endptr`

. (Thus, if `*nptr`

is not `'\0'`

but `**endptr`

is `'\0'`

on return, the entire string was valid.)

The strtoul() function return either the result of the conversion or, if there was a leading minus sign, the negation of the result of the conversion, unless the original (non-negated) value would overflow; in the latter case, strtoul() returns ULONG_MAX, and `errno`

is set to ERANGE. If no conversion could be performed, 0 is returned.