std::strtol, std::strtoll
Defined in header
<cstdlib>
|
||
long strtol( const char *str, char **str_end, int base );
|
||
long long strtoll( const char *str, char **str_end, int base );
|
(since C++11) | |
Interprets an 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) integer number representation and converts them to an integer value. The valid integer value consists of the following parts:
- (optional) plus or minus sign
- (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.
If the str
is empty or does not have the expected form, no conversion is performed, and (if str_end
is not NULL) the value of str
is stored in the object pointed to by str_end
.
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
- If successful, an integer value corresponding to the contents of
str
is returned. - If the converted value falls out of range of corresponding return type, a range error occurs (setting errno to ERANGE) and LONG_MAX, LONG_MIN, LLONG_MAX or LLONG_MIN is returned.
- If no conversion can be performed, 0 is returned.
[edit] Example
#include <iostream> #include <cstdlib> int main() { const char* begin = "10 20000000000000000000000 30 40"; char *end; for (long i = std::strtol(begin, &end, 10); begin != end; i = std::strtol(begin, &end, 10)) { begin = end; if (errno == ERANGE){ std::cout << "range error\n"; errno = 0; } std::cout << i << '\n'; } }
Output:
10 range error 9223372036854775807 30 40
[edit] See also
converts a byte string to an integer value (function) |
|
converts a byte string to an unsigned integer value (function) |
|
C documentation for strtol, strtoll
|