Scroll to navigation

std::atoi,std::atol,std::atoll(3) C++ Standard Libary std::atoi,std::atol,std::atoll(3)

NAME

std::atoi,std::atol,std::atoll - std::atoi,std::atol,std::atoll

Synopsis


Defined in header <cstdlib>
int atoi( const char* str ); (1)
long atol( const char* str ); (2)
long long atoll( const char* str ); (3) (since C++11)


Interprets an integer value in a byte string pointed to by str. The implied radix is
always 10.


Discards any whitespace characters until the first non-whitespace character is
found, then takes as many characters as possible to form a valid integer number
representation and converts them to an integer value. The valid integer value
consists of the following parts:


* (optional) plus or minus sign
* numeric digits


If the value of the result cannot be represented, i.e. the converted value falls out
of range of the corresponding return type, the behavior is undefined.

Parameters


str - pointer to the null-terminated byte string to be interpreted

Return value


Integer value corresponding to the contents of str on success.


If no conversion can be performed, 0 is returned.

Possible implementation


template<typename T>
T atoi_impl(const char* str)
{
while (std::isspace(static_cast<unsigned char>(*str)))
++str;


bool negative = false;


if (*str == '+')
++str;
else if (*str == '-')
{
++str;
negative = true;
}


T result = 0;
for (; std::isdigit(static_cast<unsigned char>(*str)); ++str)
{
int digit = *str - '0';
result *= 10;
result -= digit; // calculate in negatives to support INT_MIN, LONG_MIN,..
}


return negative ? result : -result;
}


int atoi(const char* str)
{
return atoi_impl<int>(str);
}


long atol(const char* str)
{
return atoi_impl<long>(str);
}


long long atoll(const char* str)
{
return atoi_impl<long long>(str);
}


Actual C++ library implementations fall back to C library implementations of atoi,
atoil, and atoll, which either implement it directly (as in MUSL libc) or delegate
to strtol/strtoll (as in GNU libc).

Example

// Run this code


#include <cstdlib>
#include <iostream>


int main()
{
const auto data =
{
"42",
"0x2A", // treated as "0" and junk "x2A", not as hexadecimal
"3.14159",
"31337 with words",
"words and 2",
"-012345",
"10000000000" // note: out of int32_t range
};


for (const char* s : data)
{
const int i{std::atoi(s)};
std::cout << "std::atoi('" << s << "') is " << i << '\n';
if (const long long ll{std::atoll(s)}; i != ll)
std::cout << "std::atoll('" << s << "') is " << ll << '\n';
}
}

Possible output:


std::atoi('42') is 42
std::atoi('0x2A') is 0
std::atoi('3.14159') is 3
std::atoi('31337 with words') is 31337
std::atoi('words and 2') is 0
std::atoi('-012345') is -12345
std::atoi('10000000000') is 1410065408
std::atoll('10000000000') is 10000000000

See also


stoi
stol
stoll converts a string to a signed integer
(C++11) (function)
(C++11)
(C++11)
stoul
stoull converts a string to an unsigned integer
(C++11) (function)
(C++11)
strtol converts a byte string to an integer value
strtoll (function)
(C++11)
strtoul converts a byte string to an unsigned integer value
strtoull (function)
(C++11)
strtoimax
strtoumax converts a byte string to std::intmax_t or std::uintmax_t
(C++11) (function)
(C++11)
from_chars converts a character sequence to an integer or floating-point value
(C++17) (function)
C documentation for
atoi,
atol,
atoll

2024.06.10 http://cppreference.com