C ++ strtoull () - Biblioteca padrão C ++

A função strtoull () em C ++ interpreta o conteúdo de uma string como um número inteiro da base especificada e retorna seu valor como um int longo sem sinal.

A função strtoull () em C ++ interpreta o conteúdo de uma string como um número inteiro da base especificada e retorna seu valor como um int longo sem sinal.

Esta função também define um ponteiro para apontar para o primeiro caractere após o último caractere válido da string, se houver algum, caso contrário, o ponteiro é definido como nulo.

 Para a base 10 e a string "41aac" Parte numérica válida -> 42 Primeiro caractere após a parte numérica válida -> a

protótipo strtoull () (a partir do padrão C ++ 11)

 sem sinal longo longo int strtoull (const char * str, char ** end, int base);

A função strtoull () recebe string, um ponteiro para o caractere e um valor inteiro - base como seu parâmetro, interpreta o conteúdo da string como um número inteiro da base fornecida e retorna um valor int longo longo sem sinal.

Esta função é definida no arquivo de cabeçalho.

Parâmetros strtoull ()

  • str: Uma string com a representação de um número inteiro.
  • end:Referência a um objeto já alocado do tipo char *. O valor de fim é definido pela função para o próximo caractere em str após o último caractere válido. Este parâmetro também pode ser um ponteiro nulo, caso em que não é usado.
  • base:A base do valor integral. O conjunto de valores válidos para a base é (0, 2, 3,…, 35, 36).

strtoull () Valor de retorno

A função strtoull () retorna:

  • um valor int longo longo sem sinal (que é convertido da string).
  • 0 se nenhuma conversão válida puder ser realizada.

Exemplo 1: Como funciona a função 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; )

Quando você executa o programa, a saída será:

 String value = 231ax12 Unsigned Long long int value = 231 End String = ax12 String value = 231 Unsigned Long long int value = 231 Ponteiro nulo

Um valor inteiro válido para a função strtoull () consiste em:

  • Um sinal opcional + ou -.
  • Um prefixo 0 para base octal (aplica-se apenas quando base = 8 ou 0).
  • Um prefixo 0x ou 0X para base hexadecimal (aplica-se apenas quando base = 16 ou 0).
  • Uma sequência de dígitos e / ou alfabetos (se a base for maior que 10).

Se o argumento contiver um sinal de menos (-) no início, o número negativo será convertido implicitamente em um tipo longo longo sem sinal que é um número positivo.

Os valores válidos para a base do parâmetro são (0, 2, 3,…, 35, 36). Um conjunto de dígitos válidos para a base 2 é (0, 1), para a base 3 é (0, 1, 2) e assim por diante. Para bases de 11 a 36, ​​os dígitos válidos incluem alfabetos. O conjunto de dígitos válidos para a base 11 é (0, 1,…, 9, A, a), para a base 12 é (0, 1,…, 9, A, a, B, b) e assim por diante.

Exemplo 2: função strtoull () com bases diferentes

 #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; )

Quando você executa o programa, a saída será:

 148ax para Long Long Int sem sinal com base-5 = 9 End String = 8ax 148ax para Unsigned Long Long Int com base-15 = 4405 End String = x 148ax para Unsigned Long Long Int com base-35 = 1682308 End String =

A função strtoull () ignora todos os caracteres de espaço em branco iniciais até que o caractere de espaço em branco principal seja encontrado.

Em geral, um argumento inteiro válido para a função strtoull () tem a seguinte forma:

 (espaço em branco) (- | +) (0 | 0x) (caracteres alfanuméricos)

Então, começando com este caractere, ele pega tantos caracteres quanto possível que forma uma representação de inteiro válida e os converte em um valor inteiro longo longo. O que restar da string após o último caractere válido é ignorado e não tem efeito no resultado.

Exemplo 3: função strtoull () para espaços em branco iniciais, menos e conversão invá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; )

Quando você executa o programa, a saída será:

 25axbz para Long Long Int sem sinal com base-11 = 307 End Longo = xbz -110bcd para Unsigned Long Long Int com base-2 = 18446744073709551610 End String = bcd ax110.97 para Unsigned Long Long Int com base-10 = 0 End String = ax110.97

Se a base for 0, a base numérica é determinada automaticamente observando o formato da string. Se o prefixo for 0, a base é octal (8). Se o prefixo for 0x ou 0X, a base é hexadecimal (16), caso contrário, a base é decimal (10).

Exemplo 4: função strtoull () com 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; )

Quando você executa o programa, a saída será:

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

Artigos interessantes...