C ++ strtoull () - C ++ -kirjasto

Strtoull () -funktio C ++: ssa tulkitsee merkkijonon sisällön määritetyn perustan integraaliluvuna ja palauttaa sen arvon allekirjoittamattomana pitkänä pitkänä int.

Strtoull () -funktio C ++: ssa tulkitsee merkkijonon sisällön määritetyn perustan integraaliluvuna ja palauttaa sen arvon allekirjoittamattomana pitkänä pitkänä int.

Tämä toiminto asettaa myös osoittimen osoittamaan merkkijonon viimeisen kelvollisen merkin jälkeistä ensimmäistä merkkiä, jos sellaista on, muuten osoitin asetetaan nollaksi.

 Pohjalle 10 ja merkkijonolle "41aac" Voimassa oleva numeerinen osa -> 42 Ensimmäinen merkki voimassa olevan numeerisen osan jälkeen -> a

strtoull () -prototyyppi (standardin C ++ 11 mukaan)

 allekirjoittamaton pitkä pitkä int strtoull (const char * str, char ** end, int base);

Strtoull () -funktio vie parametrina merkkijonon, osoittimen merkkiin ja kokonaislukuarvopohjan, tulkitsee merkkijonon sisällön annetun perustan kokonaisluvuksi ja palauttaa allekirjoittamattoman pitkän pitkän int-arvon.

Tämä toiminto on määritelty otsikkotiedostossa.

strtoull () -parametrit

  • str: Merkkijono, jolla on integraaliluku.
  • end:Viittaus jo varattuun kohteeseen, jonka tyyppi on char *. Loppuarvon määrittää funktio seuraavalle merkille merkkijonossa viimeisen kelvollisen merkin jälkeen. Tämä parametri voi olla myös nollaosoitin, jolloin sitä ei käytetä.
  • base:Integraaliarvon perusta. Pohjan kelvollisten arvojen joukko on (0, 2, 3,…, 35, 36).

strtoull () Palautusarvo

Strtoull () -funktio palauttaa:

  • allekirjoittamaton pitkä pitkä int-arvo (joka muunnetaan merkkijonosta).
  • 0, jos kelvollista muunnosta ei voitu suorittaa.

Esimerkki 1: Kuinka strtoull () -toiminto toimii?

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

Kun suoritat ohjelmaa, tulos on:

 Merkkijonoarvo = 231ax12 Allekirjoittamaton pitkä pitkä int-arvo = 231 Loppu merkkijono = ax12 Merkkijonoarvo = 231 Allekirjoittamaton pitkä pitkä int-arvo = 231 Nollaosoitin

Strtoull () -funktion kelvollinen kokonaisluku koostuu:

  • Valinnainen + tai - merkki.
  • Etuliite 0 oktaalialustalle (pätee vain, kun perus = 8 tai 0).
  • Etuliite 0x tai 0X heksadesimaalitasolle (pätee vain, kun perusarvo = 16 tai 0).
  • Numerosarja ja / tai aakkoset (jos pohja on suurempi kuin 10).

Jos argumentti sisältää miinusmerkin (-) alussa, negatiivinen luku muunnetaan implisiittisesti allekirjoittamattomaksi pitkäksi pitkäksi int-tyypiksi, joka on positiivinen luku.

Parametrikannan kelvolliset arvot ovat (0, 2, 3,…, 35, 36). Tukiaseman 2 kelvollisten numeroiden joukko on (0, 1), tukiasemalle 3 on (0, 1, 2) ja niin edelleen. Alustojen 11-36 alussa voimassa olevat numerot sisältävät aakkoset. Tukiaseman 11 kelvollisten numeroiden joukko on (0, 1,…, 9, A, a), tukiasemalle 12 on (0, 1,…, 9, A, a, B, b) ja niin edelleen.

Esimerkki 2: strtoull () -funktio, jolla on eri emäkset

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

Kun suoritat ohjelmaa, tulos on:

 148ax - merkitsemätön pitkä pitkä int kanssa base-5 = 9 päätemerkkijono = 8ax 148ax - allekirjoittamaton pitkä pitkä int kanssa base-15 = 4405 loppu merkkijono = x 148ax - allekirjoittamaton pitkä pitkä int kanssa base-35 = 1682308 end string =

Strtoull () -funktio jättää huomiotta kaikki johtavat välilyönnin merkit, kunnes ensisijainen ei-tyhjämerkki löytyy.

Strtoull () -funktion kelvollinen kokonaisluku-argumentti on yleensä seuraavanlainen:

 (välilyönti) (- | +) (0 | 0x) (aakkosnumeeriset merkit)

Sitten tästä merkistä alkaen tarvitaan mahdollisimman monta merkkiä, joka muodostaa kelvollisen kokonaislukuesityksen ja muuntaa ne pitkäksi pitkäksi int-arvoksi. Merkkijonosta jäljellä oleva tieto viimeisen kelvollisen merkin jälkeen jätetään huomiotta, eikä sillä ole vaikutusta tulokseen.

Esimerkki 3: strtoull () -toiminto välilyönnin, miinuksen ja virheellisen muunnoksen johtamiseen

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

Kun suoritat ohjelmaa, tulos on:

 25axbz - allekirjoittamaton pitkä pitkä int kanssa base-11 = 307 päätemerkkijono = xbz -110bcd - allekirjoittamaton pitkä pitkä int kanssa base-2 = 18446744073709551610 loppu merkkijono = bcd ax110.97 - allekirjoittamaton pitkä pitkä int kanssa base-10 = 0 loppu merkkijono = ax110.97

Jos perusta on 0, numeerinen perusta määritetään automaattisesti merkkijonon muotoa tarkastelemalla. Jos etuliite on 0, pohja on oktaali (8). Jos etuliite on 0x tai 0X, perusta on heksadesimaali (16), muuten perusta on desimaali (10).

Esimerkki 4: strtoull () -funktio perustan 0 kanssa

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

Kun suoritat ohjelmaa, tulos on:

 017x - Unsigned Long Long Int with base-0 = 15 End String = x 0x1cg to Signed Long Long Int Int with base-0 = 28 End String = g 70sxz - Allekirjoittamaton pitkä pitkä Int with base-0 = 70 End String = sxz

Mielenkiintoisia artikkeleita...