##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# strtoul, strtoull

From cppreference.com
< c‎ | string‎ | byte

Defined in header `<stdlib.h>` |  |

unsigned long strtoul( const char *str, char **str_end, int base ); |  | (until C99)
unsigned long strtoul( const char *restrict str, char **restrict str_end, int base ); |  | (since C99)
unsigned long long strtoull( const char *restrict str, char **restrict str_end, int base ); |  | (since C99)

Interprets an unsigned integer value in a byte string pointed to by `str`.

Function discards any whitespace characters (as identified by calling `isspace()`) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid base-n (where n=base) unsigned integer number representation and converts them to an integer value. The valid unsigned integer value consists of the following parts:

- (optional) prefix (`0`) indicating octal base (applies only when the base is 8 or ​0​)
- (optional) prefix (`0x` or `0X`) indicating hexadecimal base (applies only when the base is 16 or ​0​)
- a sequence of digits

The set of valid digits for base-2 integer is `01`, for base-3 integer is `012`, and so on. For bases larger than `10`, valid digits include alphabetic characters, starting from `Aa` for base-11 integer, to `Zz` for base-36 integer. The case of the characters is ignored.

Additional numeric formats may be accepted by the currently installed C locale.

If the value of base is ​0​, the numeric base is auto-detected: if the prefix is `0`, the base is octal, if the prefix is `0x` or `0X`, the base is hexadecimal, otherwise the base is decimal.

The functions sets the pointer pointed to by `str_end` to point to the character past the last character interpreted. If `str_end` is NULL, it is ignored.

### [edit] Parameters

str | - | pointer to the null-terminated byte string to be interpreted
str_end | - | pointer to a pointer to character.
base | - | base of the interpreted integer value

### [edit] Return value

Integer value corresponding to the contents of `str` on success. If the converted value falls out of range of corresponding return type, range error occurs and ULONG_MAX or ULLONG_MAX is returned. If no conversion can be performed, ​0​ is returned.

### [edit] Example

Run this code

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>

    int main(void)
    {
        /* Decimal */
        printf("%lu\n", strtoul("",NULL,10));        /* empty string           */
        printf("%lu\n", strtoul(" +0123",NULL,10));  /* leading space and zero */
        printf("%lu\n", strtoul("123",NULL,0));

        /* Binary */
        printf("%lu\n", strtoul("1100", NULL,2));

        /* Octal */
        printf("%lu\n", strtoul("14",NULL,8));
        printf("%lu\n", strtoul("014",NULL,0));

        /* Base 13 */
        printf("%lu\n", strtoul("1c",NULL,13));

        /* Hexadecimal */
        printf("%lu\n", strtoul("FFFFFFFFFFFFFFFF",NULL,16));
        printf("%lu\n", strtoul("0xFFFFFFFFFFFFFFFF",NULL,0));

        /* Base 36 */
        printf("%lu\n", strtoul("XyZ",NULL,36));   /* 44027 */

        /* Overflow, a value too large for type unsigned long int. */
        errno = 0;

        printf("%lu\n", strtoul("18446744073709551616",NULL,10));
        printf("%s\n",strerror(errno));   /* range error */

        /* Underflow. a value too small for type unsigned long int. */
        errno = 0;
        printf("%lu\n", strtoul("-1",NULL,10));
        printf("%s\n",strerror(errno));   /* success */

        /* Using str_end. */
        char *str_end;
        printf("%lu\n", strtoul("  00123 999",&str_end,10));
        printf("[%c]\n", *str_end);
        printf("%lu\n", strtoul(str_end,NULL,10));

        return 0;
    }

Output:

    0
    123
    123
    12
    12
    12
    25
    18446744073709551615
    18446744073709551615
    44027
    18446744073709551615
    Numerical result out of range
    18446744073709551615
    Success
    123
    [ ]
    999

### [edit] See also

atoi atol atoll | converts a byte string to an integer value (function) [edit]
strtol strtoll | converts a byte string to an integer value (function) [edit]
C++ documentation for strtoul

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/string/byte/strtoul&oldid=70084"