C ++ strtoull () - C ++ Standardbibliotek

Funktionen strtoull () i C ++ tolkar innehållet i en sträng som ett integrerat nummer i den angivna basen och returnerar dess värde som ett osignerat långt långt int.

Funktionen strtoull () i C ++ tolkar innehållet i en sträng som ett integrerat nummer i den angivna basen och returnerar dess värde som ett osignerat långt långt int.

Den här funktionen ställer också in en pekare för att peka på det första tecknet efter det sista giltiga tecknet i strängen om det finns någon, annars är pekaren inställd på null.

 För bas 10 och strängen "41aac" Giltig numerisk del -> 42 Första tecknet efter giltig numerisk del -> a

strtoull () prototyp (Från och med C ++ 11 standard)

 osignerad lång lång int strtoull (const char * str, char ** end, int base);

Funktionen strtoull () tar sträng, en pekare till tecken och ett heltalvärde - bas som sin parameter, tolkar strängens innehåll som ett integrerat nummer för den givna basen och returnerar ett osignerat långt långt int-värde.

Denna funktion definieras i rubrikfilen.

strtoull () Parametrar

  • str: En sträng som representerar ett integrerat tal.
  • end:Hänvisning till ett redan tilldelat objekt av typen char *. Värdet på slutet ställs in av funktionen till nästa tecken i str efter det sista giltiga tecknet. Denna parameter kan också vara en nollpekare, i vilket fall den inte används.
  • base:Grunden för det integrerade värdet. Uppsättningen av giltiga värden för bas är (0, 2, 3,…, 35, 36).

strtoull () Returvärde

Funktionen strtoull () returnerar:

  • ett osignerat långt långt int-värde (som konverteras från strängen).
  • 0 om ingen giltig konvertering kunde utföras.

Exempel 1: Hur fungerar funktionen 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; )

När du kör programmet blir resultatet:

 Strängvärde = 231ax12 osignerat långt långt värde = 231 slutsträng = ax12 strängvärde = 231 osignerat långt långt värde = 231 Nollpekare

Ett giltigt heltalsvärde för strtoull () -funktionen består av:

  • Ett valfritt + eller - tecken.
  • Ett prefix 0 för oktal bas (gäller endast när bas = 8 eller 0).
  • Ett prefix 0x eller 0X för hexadecimal bas (gäller endast när bas = 16 eller 0).
  • En sekvens av siffror och / eller alfabet (om basen är större än 10).

Om argumentet innehåller ett minustecken (-) i början omvandlas det negativa talet implicit till en osignerad lång lång int-typ som är ett positivt tal.

De giltiga värdena för parameterbas är (0, 2, 3,…, 35, 36). En uppsättning giltiga siffror för bas 2 är (0, 1), för bas 3 är (0, 1, 2) och så vidare. För baser som börjar från 11 till 36 inkluderar giltiga siffror alfabet. Uppsättningen med giltiga siffror för bas 11 är (0, 1,…, 9, A, a), för bas 12 är (0, 1,…, 9, A, a, B, b) och så vidare.

Exempel 2: strtoull () -funktion med olika baser

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

När du kör programmet blir resultatet:

 148ax till osignerad lång lång int med bas-5 = 9 ändsträng = 8ax 148ax till osignerad lång lång int med bas-15 = 4405 slutsträng = x 148ax till osignerad lång lång int med bas-35 = 1682308 slutsträng =

Funktionen strtoull () ignorerar alla de ledande blankstegstecknen tills det primära icke-vita tecknet hittas.

I allmänhet har ett giltigt heltalargument för strtoull () -funktionen följande form:

 (blanksteg) (- | +) (0 | 0x) (alfanumeriska tecken)

Sedan, med utgångspunkt från denna karaktär, tar det så många tecken som möjligt som bildar en giltig helhetsrepresentation och omvandlar dem till ett långt långt intvärde. Oavsett vad som är kvar av strängen efter att den sista giltiga karaktären ignoreras och har ingen inverkan på resultatet.

Exempel 3: funktion strtoull () för ledande blanksteg, minus och ogiltig konvertering

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

När du kör programmet blir resultatet:

 25axbz till osignerad lång lång int med bas-11 = 307 ändsträng = xbz -110bcd till osignerad lång lång int med bas-2 = 18446744073709551610 ändsträng = bcd ax110.97 till osignerad lång lång int med bas-10 = 0 slutsträng = ax110.97

Om basen är 0 bestäms den numeriska basen automatiskt genom att titta på strängens format. Om prefixet är 0 är basen oktal (8). Om prefixet är 0x eller 0X är basen hexadecimal (16), annars är basen decimal (10).

Exempel 4: funktion strtoull () med bas 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; )

När du kör programmet blir resultatet:

 017x till osignerad lång lång int med bas-0 = 15 ändsträng = x 0x1cg till osignerad lång lång int med bas-0 = 28 slutsträng = g 70sxz till osignerad lång lång int med bas-0 = 70 slutsträng = sxz

Intressanta artiklar...