std:: atoi, std:: atol, std:: atoll
|
Definido en el encabezado
<cstdlib>
|
||
|
int
atoi
(
const
char
*
str
)
;
|
(1) | |
|
long
atol
(
const
char
*
str
)
;
|
(2) | |
|
long
long
atoll
(
const
char
*
str
)
;
|
(3) | (desde C++11) |
Interpreta un valor entero en una cadena de bytes apuntada por str . La base implícita es siempre 10.
Descarta cualquier carácter de espacio en blanco hasta que se encuentra el primer carácter que no es un espacio en blanco, luego toma tantos caracteres como sea posible para formar una representación válida de número entero y los convierte en un valor entero. El valor entero válido consta de las siguientes partes:
- (opcional) signo más o menos
- dígitos numéricos
Si el valor del resultado no puede ser representado, es decir, el valor convertido cae fuera del rango del tipo de retorno correspondiente, el comportamiento es indefinido.
Contenidos |
Parámetros
| str | - | puntero a la cadena de bytes terminada en nulo que se va a interpretar |
Valor de retorno
Valor entero correspondiente al contenido de str en caso de éxito.
Si no se puede realizar ninguna conversión, 0 es retornado.
Implementación posible
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; // calcular en negativos para soportar 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); } |
Las implementaciones reales de bibliotecas C++ recurren a las implementaciones de bibliotecas C de
atoi
,
atoil
, y
atoll
, que o bien la implementan directamente (como en
MUSL libc
) o delegan en
strtol
/
strtoll
(como en
GNU libc
).
Ejemplo
#include <cstdlib> #include <iostream> int main() { const auto data = { "42", "0x2A", // tratado como "0" y basura "x2A", no como hexadecimal "3.14159", "31337 with words", "words and 2", "-012345", "10000000000" // nota: fuera del rango de int32_t }; 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'; } }
Salida posible:
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
Véase también
|
(C++11)
(C++11)
(C++11)
|
convierte una cadena a un entero con signo
(función) |
|
(C++11)
(C++11)
|
convierte una cadena a un entero sin signo
(función) |
|
(C++11)
|
convierte una cadena de bytes a un valor entero
(función) |
|
(C++11)
|
convierte una cadena de bytes a un valor entero sin signo
(función) |
|
(C++11)
(C++11)
|
convierte una cadena de bytes a
std::intmax_t
o
std::uintmax_t
(función) |
|
(C++17)
|
convierte una secuencia de caracteres a un valor entero o de punto flotante
(función) |
|
Documentación de C
para
atoi
,
atol
,
atoll
|
|