`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.