Namespaces
Variants

std:: strtoul, std:: strtoull

From cppreference.net
Definido en el encabezado <cstdlib>
unsigned long strtoul ( const char * str, char ** str_end, int base ) ;
(1)
unsigned long long strtoull ( const char * str, char ** str_end, int base ) ;
(2) (desde C++11)

Interpreta un valor entero sin signo 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 sin signo en base-n (donde n= base ) y los convierte a un valor entero. El valor entero sin signo 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 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, lo cual aplica las reglas de wraparound para enteros sin signo.

Las funciones establecen 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.

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, puede establecerse en una posición después del último carácter interpretado
base - base del valor entero interpretado

Valor de retorno

Valor entero correspondiente al contenido de str en caso de éxito. Si el valor convertido excede el rango del tipo de retorno correspondiente, ocurre un error de rango ( errno se establece a ERANGE ) y se retorna ULONG_MAX o ULLONG_MAX . Si no se puede realizar ninguna conversión, se retorna 0 .

Ejemplo

#include <cstdlib>
#include <errno.h>
#include <iostream>
#include <string>
int main()
{
    const char* p = "10 200000000000000000000000000000 30 -40 - 42";
    char* end = nullptr;
    std::cout << "Parsing '" << p << "':\n";
    for (unsigned long i = std::strtoul(p, &end, 10);
        p != end;
        i = std::strtoul(p, &end, 10))
    {
        std::cout << "'" << std::string(p, end - p) << "' -> ";
        p = end;
        if (errno == ERANGE)
        {
            errno = 0;
            std::cout << "range error, got ";
        }
        std::cout << i << '\n';
    }
    std::cout << "After the loop p points to '" << p << "'\n";
}

Salida posible:

Parsing '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
After the loop p points to ' - 42'

Véase tambié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)
(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 sin signo
(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 strtoul , strtoull