C ++ strtoull () - Biblioteca standard C ++

Funcția strtoull () din C ++ interpretează conținutul unui șir ca un număr integral al bazei specificate și îi returnează valoarea ca un int lung nesemnat.

Funcția strtoull () din C ++ interpretează conținutul unui șir ca un număr integral al bazei specificate și îi returnează valoarea ca un int lung nesemnat.

Această funcție setează, de asemenea, un indicator pentru a indica primul caracter după ultimul caracter valid al șirului, dacă există, în caz contrar, indicatorul este setat la nul.

 Pentru baza 10 și șirul "41aac" Partea numerică validă -> 42 Primul caracter după partea numerică validă -> a

strtoull () prototip (Începând cu standardul C ++ 11)

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

Funcția strtoull () ia șir, un pointer către caracter și o valoare întreagă - bază ca parametru, interpretează conținutul șirului ca un număr integral al bazei date și returnează o valoare int lungă nesemnată.

Această funcție este definită în fișierul antet.

strtoull () Parametri

  • str: Un șir având reprezentarea unui număr întreg.
  • end:Referință la un obiect deja alocat de tipul char *. Valoarea de sfârșit este setată de funcție la următorul caracter din str după ultimul caracter valid. Acest parametru poate fi, de asemenea, un pointer nul, caz în care nu este utilizat.
  • base:Baza valorii integrale. Setul de valori valide pentru bază este (0, 2, 3, …, 35, 36).

strtoull () Valoare returnată

Funcția strtoull () returnează:

  • o valoare int lungă nesemnată lungă (care este convertită din șir).
  • 0 dacă nu s-a putut efectua o conversie validă.

Exemplul 1: Cum funcționează funcția 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; )

Când rulați programul, ieșirea va fi:

 Valoarea șirului = 231ax12 Unsigned Long long int value = 231 End String = ax12 Valoarea șirului = 231 Unsigned Long long int value = 231 Pointer nul

O valoare întreagă validă pentru funcția strtoull () constă din:

  • Un semn opțional + sau -.
  • Un prefix 0 pentru baza octală (se aplică numai atunci când baza = 8 sau 0).
  • Un prefix 0x sau 0X pentru baza hexazecimală (se aplică numai atunci când baza = 16 sau 0).
  • O succesiune de cifre și / sau alfabete (dacă baza este mai mare de 10).

Dacă argumentul conține un semn minus (-) la început, numărul negativ este implicit convertit într-un tip int lung nesemnat care este un număr pozitiv.

Valorile valide pentru baza parametrilor sunt (0, 2, 3, …, 35, 36). Un set de cifre valide pentru baza 2 este (0, 1), pentru baza 3 este (0, 1, 2) și așa mai departe. Pentru bazele care încep de la 11 la 36, ​​cifrele valide includ alfabete. Setul de cifre valide pentru baza 11 este (0, 1, …, 9, A, a), pentru baza 12 este (0, 1, …, 9, A, a, B, b) și așa mai departe.

Exemplul 2: funcția strtoull () cu baze diferite

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

Când rulați programul, ieșirea va fi:

 148ax la Unsigned Long Long Int with base-5 = 9 End String = 8ax 148ax to Unsigned Long Long Int with base-15 = 4405 End String = x 148ax to Unsigned Long Long Int with base-35 = 1682308 End String =

Funcția strtoull () ignoră toate caracterele de spațiu alb principal până când se găsește caracterul principal non-spațiu alb.

În general, un argument întreg valid pentru funcția strtoull () are următoarea formă:

 (spațiu alb) (- | +) (0 | 0x) (caractere alfanumerice)

Apoi, începând de la acest caracter, este nevoie de cât mai multe caractere care formează o reprezentare întreagă validă și le convertește într-o valoare int lungă. Orice a rămas din șir după ultimul caracter valid este ignorat și nu are niciun efect asupra rezultatului.

Exemplul 3: funcția strtoull () pentru conducerea spațiului alb, minus și conversie invalidă

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

Când rulați programul, ieșirea va fi:

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

Dacă baza este 0, baza numerică este determinată automat, examinând formatul șirului. Dacă prefixul este 0, baza este octală (8). Dacă prefixul este 0x sau 0X, baza este hexazecimală (16), altfel baza este zecimală (10).

Exemplul 4: funcția strtoull () cu baza 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; )

Când rulați programul, ieșirea va fi:

 017x la Unsigned Long Long Int with base-0 = 15 End String = x 0x1cg to Unsigned Long Long Int with base-0 = 28 End String = g 70sxz to Unsigned Long Long Int with base-0 = 70 End String = sxz

Articole interesante...