std::strtoul, std::strtoull
Defined in header
<cstdlib>
|
||
unsigned long strtoul( const char *str, char **str_end, int base );
|
||
unsigned long long strtoull( const char *str, char **str_end, int base );
|
(since C++11) | |
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 <iostream> #include <cstdlib> int main() { const char* begin = "10 200000000000000000000000000000 30 40"; char *end; for (unsigned long i = std::strtoul(begin, &end, 10); begin != end; i = std::strtoul(begin, &end, 10)) { begin = end; if (errno == ERANGE){ std::cout << "range error\n"; errno = 0; } std::cout << i << '\n'; } }
Output:
10 range error 18446744073709551615 30 40
[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, strtoull
|