strtoul, strtoull
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
or0X
) 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.
Contents |
[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
#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
converts a byte string to an integer value (function) |
|
converts a byte string to an integer value (function) |
|
C++ documentation for strtoul
|