C ++ strtoull () - C ++ standardna knjižnica

Funkcija strtoull () u jeziku C ++ interpretira sadržaj niza kao integralni broj navedene baze i vraća njegovu vrijednost kao nepotpisani long long int.

Funkcija strtoull () u jeziku C ++ interpretira sadržaj niza kao integralni broj navedene baze i vraća njegovu vrijednost kao nepotpisani long long int.

Ova funkcija također postavlja pokazivač koji pokazuje na prvi znak nakon zadnjeg važećeg znaka niza ako postoji, u suprotnom je pokazivač postavljen na nulu.

 Za bazu 10 i niz "41aac" Važeći numerički dio -> 42 Prvi znak nakon važećeg numeričkog dijela -> a

prototip strtoull () (od standarda C ++ 11)

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

Funkcija strtoull () uzima string, pokazivač na znak i cjelobrojnu vrijednost - base kao svoj parametar, interpretira sadržaj niza kao integralni broj zadane baze i vraća nepotpisanu long long int vrijednost.

Ova je funkcija definirana u zaglavnoj datoteci.

strtoull () parametri

  • str: Niz koji ima prikaz integralnog broja.
  • end:Referenca na već dodijeljeni objekt tipa char *. Vrijednost end funkcija postavlja na sljedeći znak u str nakon zadnjeg važećeg znaka. Ovaj parametar također može biti null pokazivač, u kojem se slučaju ne koristi.
  • base:Osnova integralne vrijednosti. Skup valjanih vrijednosti za bazu je (0, 2, 3,…, 35, 36).

strtoull () Povratna vrijednost

Funkcija strtoull () vraća:

  • nepotpisana long long int vrijednost (koja se pretvara iz niza).
  • 0 ako se nije mogla izvršiti valjana pretvorba.

Primjer 1: Kako funkcionira funkcija 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; )

Kada pokrenete program, izlaz će biti:

 Vrijednost niza = 231ax12 Nepotpisana dugačka dugačka int vrijednost = 231 Kraj niza = ax12 Vrijednost niza = 231 Nepotpisana dugačka dugačka int vrijednost = 231 Null pokazivač

Valjana cijela vrijednost za funkciju strtoull () sastoji se od:

  • Izborni znak + ili -.
  • Prefiks 0 za osminsku bazu (odnosi se samo kada je baza = 8 ili 0).
  • Prefiks 0x ili 0X za heksadecimalnu bazu (odnosi se samo kada je baza = 16 ili 0).
  • Slijed znamenki i / ili abeceda (ako je baza veća od 10).

Ako argument na početku sadrži znak minus (-), negativni se broj implicitno pretvara u nepotpisani long long int tip koji je pozitivan broj.

Važeće vrijednosti za bazu parametara su (0, 2, 3,…, 35, 36). Skup valjanih znamenki za bazu 2 je (0, 1), za bazu 3 je (0, 1, 2) i tako dalje. Za baze koje počinju od 11 do 36, valjane znamenke uključuju abecedu. Skup valjanih znamenki za bazu 11 je (0, 1, …, 9, A, a), za bazu 12 je (0, 1, …, 9, A, a, B, b) i tako dalje.

Primjer 2: funkcija strtoull () s različitim bazama

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

Kada pokrenete program, izlaz će biti:

 148ax do Nepodpisani Long Long Int s bazom-5 = 9 Krajnji niz = 8ax 148ax do Nepotpisani Long Long Int s bazom-5 = 9 Krajnji niz = 8ax 148ax do Nepotpisani Long Long Int s bazom-35 = 1682308 End String =

Funkcija strtoull () zanemaruje sve vodeće razmake dok se ne pronađe primarni znak koji nije razmak.

Općenito, valjani cjelobrojni argument za funkciju strtoull () ima sljedeći oblik:

 (razmak) (- | +) (0 | 0x) (alfanumerički znakovi)

Zatim, počevši od ovog znaka, potrebno je što više znakova koji čine valjanu cjelobrojnu predstavu i pretvaraju ih u dugu dugu int vrijednost. Sve što ostane od niza nakon zadnjeg važećeg znaka, zanemaruje se i nema utjecaja na rezultat.

Primjer 3: funkcija strtoull () za vodeće razmake, minus i nevažeću pretvorbu

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

Kada pokrenete program, izlaz će biti:

 25axbz u Nepodpisani Long Long Int s bazom-11 = 307 Krajnji niz = xbz -110bcd u Nepotpisani Long Long Int s base-2 = 18446744073709551610 Krajnji niz = bcd ax110.97 u Nepotpisani Long Long Int s base-10 = 0 Krajnji niz = sjekira110,97

Ako je osnova 0, numerička baza se automatski određuje gledanjem formata niza. Ako je prefiks 0, osnova je osmica (8). Ako je prefiks 0x ili 0X, baza je heksadecimalna (16), inače je baza decimalna (10).

Primjer 4: funkcija strtoull () s bazom 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; )

Kada pokrenete program, izlaz će biti:

 017x u nepotpisani dugi dugi int s bazom-0 = 15 završni niz = x 0x1cg u nepotpisani dugi dugi int s bazom-0 = 28 završni niz = g 70sxz u nepotpisani dugi dugi int s bazom-0 = 70 završni niz = sxz

Zanimljivi članci...