C ++ strtoull () - Biblioteca estándar de C ++

La función strtoull () en C ++ interpreta el contenido de una cadena como un número entero de la base especificada y devuelve su valor como un unsigned long long int.

La función strtoull () en C ++ interpreta el contenido de una cadena como un número entero de la base especificada y devuelve su valor como un unsigned long long int.

Esta función también establece un puntero para apuntar al primer carácter después del último carácter válido de la cadena si lo hay, de lo contrario, el puntero se establece en nulo.

 Para base 10 y la cadena "41aac" Parte numérica válida -> 42 Primer carácter después de la parte numérica válida -> a

prototipo strtoull () (A partir del estándar C ++ 11)

 unsigned long long int strtoull (const char * str, char ** end, int base);

La función strtoull () toma una cadena, un puntero a un carácter y un valor entero - base como parámetro, interpreta el contenido de la cadena como un número entero de la base dada y devuelve un valor int largo sin signo.

Esta función se define en el archivo de encabezado.

Parámetros strtoull ()

  • str: Una cadena que tiene la representación de un número entero.
  • end:Referencia a un objeto ya asignado de tipo char *. El valor de fin lo establece la función al siguiente carácter de cadena después del último carácter válido. Este parámetro también puede ser un puntero nulo, en cuyo caso no se utiliza.
  • base:La base del valor integral. El conjunto de valores válidos para la base es (0, 2, 3,…, 35, 36).

strtoull () Valor de retorno

La función strtoull () devuelve:

  • un valor int long long sin firmar (que se convierte de la cadena).
  • 0 si no se pudo realizar una conversión válida.

Ejemplo 1: ¿Cómo funciona la función strtoull ()?

 #include #include #include using namespace std; int main() ( int base = 10; char numberString() = "231ax12"; char *end; unsigned long long int number; number = strtoull(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Unsigned Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "231"); cout << "String value = " << numberString << endl; number = strtoull(numberString, &end, base); cout << "Unsigned Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )

Cuando ejecute el programa, la salida será:

 Valor de cadena = 231ax12 Valor largo largo sin signo int = 231 Cadena final = ax12 Valor de cadena = 231 Valor largo largo sin signo = 231 Puntero nulo

Un valor entero válido para la función strtoull () consta de:

  • Un signo + o - opcional.
  • Un prefijo 0 para base octal (se aplica solo cuando base = 8 o 0).
  • Un prefijo 0x o 0X para base hexadecimal (se aplica solo cuando base = 16 o 0).
  • Una secuencia de dígitos y / o alfabetos (si la base es mayor que 10).

Si el argumento contiene un signo menos (-) al principio, el número negativo se convierte implícitamente en un tipo int long long sin signo que es un número positivo.

Los valores válidos para la base de parámetros son (0, 2, 3,…, 35, 36). Un conjunto de dígitos válidos para la base 2 es (0, 1), para la base 3 es (0, 1, 2) y así sucesivamente. Para las bases que comienzan del 11 al 36, los dígitos válidos incluyen alfabetos. El conjunto de dígitos válidos para la base 11 es (0, 1,…, 9, A, a), para la base 12 es (0, 1,…, 9, A, a, B, b) y así sucesivamente.

Ejemplo 2: función strtoull () con diferentes bases

 #include #include using namespace std; int main() ( char *end; cout << "148ax" << " to Unsigned Long Long Int with base-5 = " << strtoll("148ax", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-15 = " << strtoll("148ax", &end, 15) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-35 = " << strtoll("148ax", &end, 35) << endl; cout << "End String = " << end << endl << endl; return 0; )

Cuando ejecute el programa, la salida será:

 148ax a Unsigned Long Long Int con base-5 = 9 End String = 8ax 148ax a Unsigned Long Long Int con base-15 = 4405 End String = x 148ax a Unsigned Long Long Int con base-35 = 1682308 End String =

La función strtoull () ignora todos los espacios en blanco iniciales hasta que se encuentra el carácter primario que no es un espacio en blanco.

En general, un argumento entero válido para la función strtoull () tiene la siguiente forma:

 (espacio en blanco) (- | +) (0 | 0x) (caracteres alfanuméricos)

Luego, a partir de este carácter, toma tantos caracteres como sea posible que forman una representación de entero válida y los convierte en un valor int long long. Lo que quede de la cadena después del último carácter válido se ignora y no tiene ningún efecto en el resultado.

Ejemplo 3: función strtoull () para espacios en blanco iniciales, menos y conversión no válida

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Unsigned Long Long Int with base-11 = " << strtoull(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; /* Negative value is converted to unsigned long long int type */ cout << " -110bcd" << " to Unsigned Long Long Int with base-2 = " << strtoull(" -110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Unsigned Long Long Int with base-10 = " << strtoull("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Cuando ejecute el programa, la salida será:

 25axbz a Unsigned Long Long Int con base-11 = 307 End String = xbz -110bcd a Unsigned Long Long Int con base-2 = 18446744073709551610 End String = bcd ax110.97 a Unsigned Long Long Int con base-10 = 0 End String = ax110.97

Si la base es 0, la base numérica se determina automáticamente al observar el formato de la cadena. Si el prefijo es 0, la base es octal (8). Si el prefijo es 0x o 0X, la base es hexadecimal (16); de lo contrario, la base es decimal (10).

Ejemplo 4: función strtoull () con base 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "017x" << " to Unsigned Long Long Int with base-0 = " << strtoull("017x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x1cg" << " to Unsigned Long Long Int with base-0 = " << strtoull("0x1cg", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "70sxz" << " to Unsigned Long Long Int with base-0 = " << strtoull("70sxz", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Cuando ejecute el programa, la salida será:

 017x a Unsigned Long Long Int con base-0 = 15 End String = x 0x1cg a Unsigned Long Long Int con base-0 = 28 End String = g 70sxz a Unsigned Long Long Int con base-0 = 70 End String = sxz

Articulos interesantes...