Namespaces
Variants

std:: strtoimax, std:: strtoumax

From cppreference.net
Definido en el encabezado <cinttypes>
std:: intmax_t strtoimax ( const char * nptr, char ** endptr, int base ) ;
(1) (desde C++11)
std:: uintmax_t strtoumax ( const char * nptr, char ** endptr, int base ) ;
(2) (desde C++11)

Interpreta un valor entero en una cadena de bytes apuntada por nptr .

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 ( 0x o 0X ) 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 base- 2 es {0, 1} , para enteros 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 base- 11 , hasta Zz para enteros 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.

Las funciones establecen el puntero apuntado por endptr para que apunte al carácter posterior al último carácter interpretado. Si endptr es un puntero nulo, se ignora.

Si el nptr está vacío o no tiene el formato esperado, no se realiza ninguna conversión, y (si enptr no es un puntero nulo) el valor de nptr se almacena en el objeto apuntado por endptr .

Contenidos

Parámetros

nptr - puntero a la cadena de bytes terminada en nulo que se va a interpretar
endptr - 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 excede el rango del tipo de retorno correspondiente, ocurre un error de rango (estableciendo errno a ERANGE ) y se devuelve INTMAX_MAX , INTMAX_MIN , UINTMAX_MAX o 0 , según corresponda.
  • Si no se puede realizar ninguna conversión, se devuelve 0 .

Ejemplo

#include <cinttypes>
#include <iostream>
#include <string>
int main()
{
    std::string str = "helloworld";
    std::intmax_t val = std::strtoimax(str.c_str(), nullptr, 36);
    std::cout << str << " in base 36 is " << val << " in base 10\n";
    char* nptr;
    val = std::strtoimax(str.c_str(), &nptr, 30);
    if (nptr != &str[0] + str.size())
        std::cout << str << " in base 30 is invalid."
                  << " The first invalid digit is '" << *nptr << "'\n";
}

Salida:

helloworld in base 36 is 1767707668033969 in base 10
helloworld in base 30 is invalid. The first invalid digit is 'w'

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)
convierte una cadena de bytes a un valor entero
(función)
convierte una cadena de bytes a un valor entero sin signo
(función)
(C++11) (C++11)
convierte una cadena ancha a std::intmax_t o std::uintmax_t
(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)
convierte una cadena de bytes a un valor entero
(función)
Documentación de C para strtoimax , strtoumax