C ++ strtoull () - standardní knihovna C ++

Funkce strtoull () v C ++ interpretuje obsah řetězce jako celé číslo zadaného základu a vrátí jeho hodnotu jako nepodepsaný dlouhý dlouhý int.

Funkce strtoull () v C ++ interpretuje obsah řetězce jako celé číslo zadaného základu a vrátí jeho hodnotu jako nepodepsaný dlouhý dlouhý int.

Tato funkce také nastaví ukazatel tak, aby ukazoval na první znak za posledním platným znakem řetězce, pokud existuje, jinak je ukazatel nastaven na null.

 Pro základnu 10 a řetězec "41aac" Platná číselná část -> 42 První znak za platnou číselnou částí -> a

strtoull () prototyp (podle standardu C ++ 11)

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

Funkce strtoull () vezme řetězec, ukazatel na znak a celočíselnou hodnotu - základ jako svůj parametr, interpretuje obsah řetězce jako celé číslo dané báze a vrátí nepodepsanou hodnotu long long int.

Tato funkce je definována v hlavičkovém souboru.

strtoull () parametry

  • str: Řetězec mající zastoupení celočíselného čísla.
  • end:Odkaz na již přidělený objekt typu char *. Hodnota end je nastavena funkcí na další znak v str za posledním platným znakem. Tento parametr může být také nulový ukazatel, v takovém případě se nepoužívá.
  • base:Základ integrální hodnoty. Sada platných hodnot pro základnu je (0, 2, 3,…, 35, 36).

strtoull () Vrátí hodnotu

Funkce strtoull () vrací:

  • nepodepsaná dlouhá dlouhá int hodnota (která je převedena z řetězce).
  • 0, pokud nelze provést platný převod.

Příklad 1: Jak funguje funkce 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; )

Když spustíte program, výstup bude:

 Hodnota řetězce = 231ax12 Nepodepsaná hodnota Long Long Int = 231 Konec řetězce = Ax12 Hodnota řetězce = 231 Nepodepsaná hodnota Long Long Int = 231 Nulový ukazatel

Platná celočíselná hodnota pro funkci strtoull () se skládá z:

  • Volitelné znaménko + nebo -.
  • Předpona 0 pro osmičkový základ (platí pouze v případě, že základna = 8 nebo 0).
  • Prefix 0x nebo 0X pro hexadecimální základnu (platí pouze v případě, že základna = 16 nebo 0).
  • Posloupnost číslic a / nebo abeced (pokud je základna větší než 10).

Pokud argument obsahuje na začátku znaménko minus (-), je záporné číslo implicitně převedeno na nepodepsaný typ long long int, což je kladné číslo.

Platné hodnoty pro základnu parametrů jsou (0, 2, 3,…, 35, 36). Sada platných číslic pro základnu 2 je (0, 1), pro základnu 3 je (0, 1, 2) atd. U základen začínajících od 11 do 36 zahrnují platné číslice abecedy. Sada platných číslic pro základnu 11 je (0, 1,…, 9, A, a), pro základnu 12 je (0, 1, …, 9, A, a, B, b) atd.

Příklad 2: funkce strtoull () s různými bázemi

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

Když spustíte program, výstup bude:

 148ax na nepodepsaný Long Long Int se základnou-5 = 9 koncový řetězec = 8ax 148ax na nepodepsaný Long Long Int se základnou-5 = 440ax na nepodepsaný Long Long Int se základnou-35 = 1682308 koncový řetězec =

Funkce strtoull () ignoruje všechny úvodní prázdné znaky, dokud není nalezen primární znak bez mezer.

Platný celočíselný argument pro funkci strtoull () má obecně následující formu:

 (mezery) (- | +) (0 | 0x) (alfanumerické znaky)

Poté, počínaje tímto znakem, trvá co nejvíce znaků, které tvoří platnou celočíselnou reprezentaci a převádí je na dlouhou dlouhou hodnotu int. Cokoli, co zbylo z řetězce po posledním platném znaku, je ignorováno a nemá to žádný vliv na výsledek.

Příklad 3: funkce strtoull () pro vedení mezer, minus a neplatnou konverzi

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

Když spustíte program, výstup bude:

 25axbz na nepodepsaný Long Long Int se základnou-11 = 307 koncový řetězec = xbz -110bcd na nepodepsaný dlouhý dlouhý int se základnou-2 = 18446744073709551610 koncový řetězec = bcd ax110.97 až nepodepsaný dlouhý dlouhý int se základnou-10 = 0 koncový řetězec = ax110.97

Pokud je základna 0, číselná základna se určí automaticky při pohledu na formát řetězce. Pokud je předpona 0, základ je osmičkový (8). Pokud je předpona 0x nebo 0X, základna je šestnáctková (16), jinak je základna desítková (10).

Příklad 4: funkce strtoull () se základnou 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; )

Když spustíte program, výstup bude:

 017x na nepodepsaný dlouhý dlouhý int se základnou-0 = 15 koncový řetězec = x 0x1cg na nepodepsaný dlouhý dlouhý int se základnou-0 = 28 koncový řetězec = g 70sxz na nepodepsaný dlouhý dlouhý int se základnou-0 = 70 koncový řetězec = sxz

Zajímavé články...