unsigned long int strtoul(const char *nptr, char **endptr, int base);

**strtoul** converts the initial portion of the string pointed to by **nptr**
to a **long int** representation.

First, **strtoul** decomposes the input string into three parts: an initial,
possibly empty, sequence of white-space characters (as specified by isspace),
a subject sequence resembling an integer represented in some radix determined
by the value of **base**, and a final string of one or more unrecognized
characters, including the terminating null character of the input string. **strtoul**
then attempts to convert the subject sequence to an integer, and return the
result.

When converting, no integer suffix (such as U, L, UL, LL, ULL) is allowed.

If the value of **base** is zero, the expected form of the subject sequence
is an optional plus or minus sign followed by an integer constant.

If the value of **base** is between 2 and 36 (inclusive), the expected form
of the subject sequence is an optional plus or minus sign followed by a sequence
of letters and digits representing an integer with the radix specified by **base**.
The letters from a (or A) through z (or Z) represent the values 10 through 35;
only letters and digits whose ascribed values are less than that of **base**
are permitted.

If the value of **base** is 16, the characters ‘0x’ or ‘0X’ may optionally
precede the sequence of letters and digits, following the optional sign.

The subject sequence is defined as the longest initial subsequence of the input string, starting with the first non-white-space character, that is of the expected form. The subject sequence contains no characters if the input string is empty or consists entirely of white space, or if the first non-white-space character is other than a sign or a permissible letter or digit.

If the subject sequence has the expected form and the value of **base**
is zero, the sequence of characters starting with the first digit is interpreted
as an integer constant. If the subject sequence has the expected form and the
value of **base** is between 2 and 36, it is used as the base for conversion.

If the subject sequence begins with a minus sign, the value resulting from the conversion is negated.

A pointer to the final string is stored in the object pointed to by **endptr**,
provided that **endptr** is not a null pointer.

If the subject sequence is empty or does not have the expected form, no conversion
is performed, the value of **nptr** is stored in the object pointed to by
**endptr**, provided that **endptr** is not a null pointer.

**strtoul** returns the converted value, if any. If no conversion could
be performed, zero is returned. If the correct value is outside the range of
representable values, LONG_MAX or ULONG_MAX is returned according
to the sign of the value, if any, and the value of the macro **ERANGE** is
stored in errno.