Namespaces
Variants
Actions

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

From cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Defined in header <cstdlib>
int       atoi(constchar* str );
(1)
long      atol(constchar* str );
(2)
longlong atoll(constchar* 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.

Contents

[edit]Parameters

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

[edit]Return value

Integer value corresponding to the contents of str on success.

If no conversion can be performed, 0 is returned.

[edit]Possible implementation

template<typename T> T atoi_impl(constchar* str){while(std::isspace(static_cast<unsignedchar>(*str)))++str;   bool negative =false;   if(*str =='+')++str;elseif(*str =='-'){++str; negative =true;}   T result =0;for(;std::isdigit(static_cast<unsignedchar>(*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(constchar* str){return atoi_impl<int>(str);}   long atol(constchar* str){return atoi_impl<long>(str);}   longlong atoll(constchar* str){return atoi_impl<longlong>(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).

[edit]Example

#include <cstdlib>#include <iostream>   int main(){constauto 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(constchar* s : data){constint i{std::atoi(s)};std::cout<<"std::atoi('"<< s <<"') is "<< i <<'\n';if(constlonglong 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

[edit]See also

(C++11)(C++11)(C++11)
converts a string to a signed integer
(function)[edit]
(C++11)(C++11)
converts a string to an unsigned integer
(function)[edit]
converts a byte string to an integer value
(function)[edit]
converts a byte string to an unsigned integer value
(function)[edit]
(C++11)(C++11)
converts a byte string to std::intmax_t or std::uintmax_t
(function)[edit]
(C++17)
converts a character sequence to an integer or floating-point value
(function)[edit]
C documentation for atoi, atol, atoll
close