Namespaces
Variants

std::stoul, std::stoull

De es.cppreference.net
 
 
 
std::basic_string
 
Definido en el encabezado <string>
unsigned long      stoul ( const std::string& str,
                           std::size_t* pos = nullptr, int base = 10 );
(1) (desde C++11)
unsigned long      stoul ( const std::wstring& str,
                           std::size_t* pos = nullptr, int base = 10 );
(2) (desde C++11)
unsigned long long stoull( const std::string& str,
                           std::size_t* pos = nullptr, int base = 10 );
(3) (desde C++11)
unsigned long long stoull( const std::wstring& str,
                           std::size_t* pos = nullptr, int base = 10 );
(4) (desde C++11)

Interpreta un valor entero sin signo en la cadena str.

Sea ptr un puntero interno (a las funciones de conversión) de tipo char* (1,3) o wchar_t* (2,4), según corresponda.

1) Llama a std::strtoul(str.c_str(), &ptr, base).
2) Llama a std::wcstoul(str.c_str(), &ptr, base).
3) Llama a std::strtoull(str.c_str(), &ptr, base).
4) Llama a std::wcstoull(str.c_str(), &ptr, base).

Descarta cualquier carácter de espacio en blanco (identificado llamando a std::isspace) hasta encontrar el primer carácter que no sea espacio en blanco, luego toma tantos caracteres como sea posible para formar una representación de número entero sin signo válida en base-n (donde n=base) y los convierte en 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 (se aplica solo cuando la base es 8 o 0)
  • (opcional) prefijo (0x o 0X) que indica base hexadecimal (se aplica solo cuando la base es 16 o 0)
  • una secuencia de dígitos

El conjunto de valores válidos para la base es {0, 2, 3, ..., 36}. El conjunto de dígitos válidos para enteros en base-2 es {0, 1}, para enteros en 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 en base-11, hasta Zz para enteros en base-36. Las mayúsculas y minúsculas de los caracteres se ignoran.

La locale C instalada actualmente puede aceptar formatos numéricos adicionales.

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 fue 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 menos unario en el tipo de resultado, lo que aplica reglas de desbordamiento de enteros sin signo.

Si pos no es un puntero nulo, entonces ptr recibirá la dirección del primer carácter no convertido en str.c_str(), y el índice de ese carácter se calculará y almacenará en *pos, dando el número de caracteres que fueron procesados por la conversión.

Parámetros

str - la cadena a convertir
pos - dirección de un entero para almacenar el número de caracteres procesados
base - la base numérica

Valor de retorno

La cadena convertida al tipo de entero sin signo especificado.

Excepciones

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2009 C++11 std::out_of_range no sería lanzado si
std::strtoul o std::strtoull establece errno a ERANGE
lanzará

Véase también

(C++11) (C++11) (C++11)
convierte una cadena a un entero con signo
(función)
(C++11) (C++11) (C++11)
convierte una cadena a un valor de punto flotante
(función)