C ++ strtoull () - C ++ standartinė biblioteka

Funkcija strtoull () C ++ interpretuoja eilutės turinį kaip vientisą nurodytos bazės skaičių ir grąžina jos reikšmę kaip nepasirašytą ilgą ilgą int.

Funkcija strtoull () C ++ interpretuoja eilutės turinį kaip vientisą nurodytos bazės skaičių ir grąžina jos reikšmę kaip nepasirašytą ilgą ilgą int.

Ši funkcija taip pat nustato, kad žymeklis nukreiptų į pirmąjį simbolį po paskutinio galiojančio eilutės simbolio, jei toks yra, kitaip rodyklė nustatoma kaip nulis.

 10 pagrindo ir eilutės „41aac“ tinkama skaitinė dalis -> 42 Pirmasis simbolis po galiojančios skaitinės dalies ->

strtoull () prototipas (Pagal C ++ 11 standartą)

 nepasirašytas ilgas ilgas int strtoull (const char * str, char ** end, int bazė);

Funkcija „strtoull ()“ kaip parametrą ima eilutę, rodyklę į simbolį ir sveiko skaičiaus reikšmę - bazė, eilutės turinį interpretuoja kaip vientisą nurodytos bazės skaičių ir grąžina nepasirašytą ilgą ilgą int vertę.

Ši funkcija apibrėžta antraštės faile.

strtoull () parametrai

  • str: Eilutė, turinti vientisąjį skaičių.
  • end:Nuoroda į jau priskirtą char * tipo objektą. Pabaigos reikšmę funkcija nustato kitam simboliui eilutėje po paskutinio galiojančio simbolio. Šis parametras taip pat gali būti nulinis rodyklė, tokiu atveju jis nenaudojamas.
  • base:Integraliosios vertės pagrindas. Galiojančių bazių verčių rinkinys yra (0, 2, 3,…, 35, 36).

strtoull () Grąžinimo vertė

Funkcija strtoull () grąžina:

  • nepasirašyta ilga ilga int reikšmė (kuri konvertuojama iš eilutės).
  • 0, jei nepavyko atlikti galiojančio konvertavimo.

1 pavyzdys: Kaip veikia strtoull () funkcija?

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

Kai paleisite programą, išvestis bus:

 Stygos vertė = 231ax12 Nepasirašyta Ilgoji ilgoji int reikšmė = 231 Pabaigos eilutė = ax12 Stygos vertė = 231 Nepasirašyta Ilgoji ilgoji int reikšmė = 231 Nulinė rodyklė

Galiojančią „strtoull ()“ funkcijos sveiką skaičių sudaro:

  • Pasirenkamas ženklas „+“ arba „-“.
  • Aštuntainio pagrindo priešdėlis 0 (taikomas tik tada, kai pagrindas = 8 arba 0).
  • Šešioliktainės bazės priešdėlis 0x arba 0X (taikomas tik tada, kai bazė = 16 arba 0).
  • Skaičių ir (arba) abėcėlių seka (jei pagrindas didesnis nei 10).

Jei argumento pradžioje yra minuso (-) ženklas, neigiamas skaičius yra netiesiogiai konvertuojamas į nepasirašytą ilgą ilgą int tipą, kuris yra teigiamas skaičius.

Tinkamos parametrų vertės yra (0, 2, 3,…, 35, 36). Galiojančių 2 bazės skaitmenų rinkinys yra (0, 1), 3 pagrindo yra (0, 1, 2) ir pan. Bazėms, prasidedančioms nuo 11 iki 36, galiojantys skaitmenys apima abėcėles. Galiojančių 11 bazės skaitmenų rinkinys yra (0, 1,…, 9, A, a), 12 pagrindo yra (0, 1,…, 9, A, a, B, b) ir pan.

2 pavyzdys: funkcija strtoull () su skirtingais pagrindais

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

Kai paleisite programą, išvestis bus:

 148ax iki nepasirašyto ilgo ilgo vid. Su bazine-5 = 9 galine eilute = 8ax 148ax iki nepasirašyto ilgo ilgo vid.

Funkcija „strtoull ()“ ignoruoja visus pagrindinius tarpų simbolius, kol bus rastas pagrindinis ne tarpo simbolis.

Apskritai, tinkamas sveiko skaičiaus argumentas, skirtas „strtoull ()“ funkcijai, turi tokią formą:

 (tarpai) (- | +) (0 | 0x) (raidiniai ir skaitiniai simboliai)

Tada, pradedant nuo šio simbolio, reikia kuo daugiau simbolių, kurie suformuoja galiojantį sveikojo skaičiaus vaizdą ir paverčia juos ilga ilgąja int reikšme. Nepaisant to, kas lieka eilutėje po paskutinio galiojančio simbolio, tai neturi įtakos rezultatui.

3 pavyzdys: strtoull () funkcija, leidžianti įvesti tarpą, atėmus ir netinkamą konversiją

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

Kai paleisite programą, išvestis bus:

 25axbz - nepasirašytas ilgas ilgas vidinis su baze-11 = 307 pabaigos eilutė = xbz -110bcd iki nepasirašytas ilgas ilgas vidinis su baze-2 = 18446744073709551610 pabaigos eilutė = bcd ax110.97 iki nepasirašytas ilgas ilgas vidinis su bazine-10 = 0 pabaigos eilutė = ax110.97

Jei pagrindas yra 0, skaitinė bazė nustatoma automatiškai, žiūrint į eilutės formatą. Jei priešdėlis yra 0, pagrindas yra aštuonkojis (8). Jei priešdėlis yra 0x arba 0X, pagrindas yra šešioliktainis (16), kitaip pagrindas yra dešimtainis (10).

4 pavyzdys: funkcija strtoull () su 0 pagrindu

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

Kai paleisite programą, išvestis bus:

 017x iki nepasirašyto ilgo ilgo vid. Su bazine-0 = 15 pabaigos eilute = x 0x1cg iki nepasirašyto ilgo ilgo vid.

Įdomios straipsniai...