C ++ strtoull () - C ++ standaardbibliotheek

De functie strtoull () in C ++ interpreteert de inhoud van een string als een geheel getal van de opgegeven basis en retourneert de waarde ervan als een niet-ondertekende lange lange int.

De functie strtoull () in C ++ interpreteert de inhoud van een string als een geheel getal van de opgegeven basis en retourneert de waarde ervan als een niet-ondertekende lange lange int.

Deze functie stelt ook een pointer zo in dat deze naar het eerste karakter wijst na het laatste geldige karakter van de string, als die er is, anders wordt de pointer op null gezet.

 Voor grondtal 10 en de string "41aac" Geldig numeriek deel -> 42 Eerste teken na geldig numeriek deel -> a

strtoull () prototype (vanaf C ++ 11 standaard)

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

De functie strtoull () neemt string, een pointer naar karakter en een integer waarde - base als parameter, interpreteert de inhoud van string als een geheel getal van de gegeven base en retourneert een niet-ondertekende lange lange int-waarde.

Deze functie is gedefinieerd in het header-bestand.

strtoull () Parameters

  • str: Een tekenreeks met de weergave van een geheel getal.
  • end:Verwijzing naar een reeds toegewezen object van het type char *. De waarde van end wordt door de functie ingesteld op het volgende teken in str na het laatste geldige teken. Deze parameter kan ook een null-pointer zijn, in welk geval deze niet wordt gebruikt.
  • base:De basis van de integrale waarde. De reeks geldige waarden voor het grondtal is (0, 2, 3,…, 35, 36).

strtoull () Retourwaarde

De functie strtoull () retourneert:

  • een niet-ondertekende lange lange int-waarde (die wordt geconverteerd uit de tekenreeks).
  • 0 als er geen geldige conversie kon worden uitgevoerd.

Voorbeeld 1: Hoe werkt strtoull () functie?

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

Wanneer u het programma uitvoert, is de uitvoer:

 Stringwaarde = 231ax12 Unsigned Long long int value = 231 End String = ax12 Stringwaarde = 231 Unsigned Long long int value = 231 Null pointer

Een geldige integerwaarde voor de functie strtoull () bestaat uit:

  • Een optioneel + of - teken.
  • Een voorvoegsel 0 voor octaal grondtal (alleen van toepassing als grondtal = 8 of 0).
  • Een voorvoegsel 0x of 0X voor hexadecimaal grondtal (alleen van toepassing als grondtal = 16 of 0).
  • Een reeks cijfers en / of alfabetten (als het grondtal groter is dan 10).

Als het argument aan het begin een minteken (-) bevat, wordt het negatieve getal impliciet geconverteerd naar een lang en lang int-type zonder teken dat een positief getal is.

De geldige waarden voor de parameterbasis zijn (0, 2, 3,…, 35, 36). Een reeks geldige cijfers voor basis 2 is (0, 1), voor basis 3 is (0, 1, 2) enzovoort. Voor basissen die beginnen met 11 tot 36, zijn geldige cijfers inclusief alfabetten. De reeks geldige cijfers voor basis 11 is (0, 1, …, 9, A, a), voor basis 12 is (0, 1, …, 9, A, a, B, b) enzovoort.

Voorbeeld 2: strtoull () functie met verschillende 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; )

Wanneer u het programma uitvoert, is de uitvoer:

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

De functie strtoull () negeert alle leidende witruimtetekens totdat het primaire niet-witruimteteken is gevonden.

Over het algemeen heeft een geldig integer-argument voor de functie strtoull () de volgende vorm:

 (witruimte) (- | +) (0 | 0x) (alfanumerieke tekens)

Vervolgens, beginnend bij dit teken, zijn er zoveel mogelijk tekens nodig die een geldige integer-representatie vormen en deze omzetten in een lange lange int-waarde. Wat er overblijft van de string na het laatste geldige teken wordt genegeerd en heeft geen effect op het resultaat.

Voorbeeld 3: strtoull () functie voor voorloopspaties, minus en ongeldige conversie

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

Wanneer u het programma uitvoert, is de uitvoer:

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

Als het grondtal 0 is, wordt het numerieke grondtal automatisch bepaald door naar het formaat van de string te kijken. Als het voorvoegsel 0 is, is de basis octaal (8). Als het voorvoegsel 0x of 0X is, is de basis hexadecimaal (16), anders is de basis decimaal (10).

Voorbeeld 4: strtoull () functie met grondtal 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; )

Wanneer u het programma uitvoert, is de uitvoer:

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

Interessante artikelen...