std:: strtol, std:: strtoll
|
Definido en el encabezado
<cstdlib>
|
||
|
long
strtol
(
const
char
*
str,
char
**
str_end,
int
base
)
;
|
(1) | |
|
long
long
strtoll
(
const
char
*
str,
char
**
str_end,
int
base
)
;
|
(2) | (desde C++11) |
Interpreta un valor entero en una cadena de bytes apuntada por str .
Descarta cualquier carácter de espacio en blanco (identificado llamando a
std::isspace
) hasta encontrar el primer carácter que no sea un espacio en blanco, luego toma tantos caracteres como sea posible para formar una representación válida de número entero en
base-n
(donde n=
base
) y los convierte en un valor entero. El valor entero válido consta de las siguientes partes:
- (opcional) signo más o menos
-
(opcional)
prefijo (
0) que indica base octal (solo aplica cuando la base es 8 o 0 ) -
(opcional)
prefijo (
0xo0X) que indica base hexadecimal (solo aplica cuando la base es 16 o 0 ) - una secuencia de dígitos
El conjunto de valores válidos para base es
{0, 2, 3, ..., 36}
. El conjunto de dígitos válidos para enteros de base-
2
es
{0, 1}
, para enteros de base-
3
es
{0, 1, 2}
, y así sucesivamente. Para bases mayores que
10
, los dígitos válidos incluyen caracteres alfabéticos, comenzando desde
Aa
para enteros de base-
11
, hasta
Zz
para enteros de base-
36
. Se ignora la capitalización de los caracteres.
Se pueden aceptar formatos numéricos adicionales según la configuración regional de C actualmente instalada locale .
Si el valor de
base
es
0
, la base numérica se detecta automáticamente: si el prefijo es
0
, la base es octal, si el prefijo es
0x
o
0X
, la base es hexadecimal, de lo contrario la base es decimal.
Si el signo menos formaba parte de la secuencia de entrada, el valor numérico calculado a partir de la secuencia de dígitos se niega como si fuera mediante unary minus en el tipo de resultado.
La función establece el puntero apuntado por str_end para que apunte al carácter posterior al último carácter interpretado. Si str_end es un puntero nulo, se ignora.
Si la str está vacía o no tiene el formato esperado, no se realiza ninguna conversión, y (si str_end no es un puntero nulo) el valor de str se almacena en el objeto apuntado por str_end .
Contenidos |
Parámetros
| str | - | puntero a la cadena de bytes terminada en nulo que se interpretará |
| str_end | - | puntero a un puntero a carácter |
| base | - | base del valor entero interpretado |
Valor de retorno
- Si tiene éxito, se devuelve un valor entero correspondiente al contenido de str .
- Si el valor convertido está fuera del rango del tipo de retorno correspondiente, ocurre un error de rango (estableciendo errno a ERANGE ) y se devuelve LONG_MAX , LONG_MIN , LLONG_MAX o LLONG_MIN .
- Si no se puede realizar ninguna conversión, se devuelve 0 .
Ejemplo
#include <cerrno> #include <cstdlib> #include <iomanip> #include <iostream> #include <string> int main() { const char* p = "10 200000000000000000000000000000 30 -40"; std::cout << "Parsing " << std::quoted(p) << ":\n"; for (;;) { // errno puede establecerse a cualquier valor distinto de cero por una llamada a función de biblioteca // independientemente de si hubo un error, por lo que debe limpiarse // para verificar el error establecido por strtol errno = 0; char* p_end{}; const long i = std::strtol(p, &p_end, 10); if (p == p_end) break; const bool range_error = errno == ERANGE; const std::string extracted(p, p_end - p); p = p_end; std::cout << "Extracted " << std::quoted(extracted) << ", strtol returned " << i << '.'; if (range_error) std::cout << "\n Range error occurred."; std::cout << '\n'; } }
Salida posible:
Parsing "10 200000000000000000000000000000 30 -40": Extracted "10", strtol returned 10. Extracted " 200000000000000000000000000000", strtol returned 9223372036854775807. Range error occurred. Extracted " 30", strtol returned 30. Extracted " -40", strtol returned -40.
Véase también
|
(C++11)
(C++11)
(C++11)
|
convierte una cadena a un entero con signo
(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) |
|
convierte una cadena ancha a un valor entero
(función) |
|
|
convierte una cadena de bytes a un valor de punto flotante
(función) |
|
|
(C++17)
|
convierte una secuencia de caracteres a un valor entero o de punto flotante
(función) |
|
(C++11)
|
convierte una cadena de bytes a un valor entero
(función) |
|
Documentación de C
para
strtol
,
strtoll
|
|