C ++ strtoull () - C ++ standardowa biblioteka

Funkcja strtoull () w C ++ interpretuje zawartość ciągu jako liczbę całkowitą określonej bazy i zwraca jej wartość jako długość int bez znaku.

Funkcja strtoull () w C ++ interpretuje zawartość ciągu jako liczbę całkowitą określonej bazy i zwraca jej wartość jako długość int bez znaku.

Ta funkcja ustawia również wskaźnik tak, aby wskazywał na pierwszy znak po ostatnim prawidłowym znaku ciągu, jeśli taki istnieje, w przeciwnym razie wskaźnik jest ustawiony na null.

 Dla podstawy 10 i ciągu „41aac” Prawidłowa część numeryczna -> 42 Pierwszy znak po prawidłowej części numerycznej -> a

strtoull () prototyp (w standardzie C ++ 11)

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

Funkcja strtoull () przyjmuje jako parametr ciąg, wskaźnik do znaku i wartość całkowitą - base, interpretuje zawartość łańcucha jako liczbę całkowitą podanej bazy i zwraca wartość typu long int bez znaku.

Ta funkcja jest zdefiniowana w pliku nagłówkowym.

Strtoull () Parametry

  • str: Łańcuch reprezentujący liczbę całkowitą.
  • end:Odniesienie do już przydzielonego obiektu typu char *. Wartość end jest ustawiana przez funkcję na następny znak w str po ostatnim prawidłowym znaku. Ten parametr może być również wskaźnikiem zerowym, w którym to przypadku nie jest używany.
  • base:Podstawa wartości całkowitej. Zestaw poprawnych wartości dla podstawy to (0, 2, 3,…, 35, 36).

strtoull () Wartość zwracana

Funkcja strtoull () zwraca:

  • bez znaku long long int wartość (która jest konwertowana z ciągu).
  • 0, jeśli nie można przeprowadzić żadnej prawidłowej konwersji.

Przykład 1: Jak działa funkcja 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; )

Po uruchomieniu programu wynik będzie następujący:

 Wartość ciągu = 231ax12 Unsigned Long long int value = 231 End String = ax12 String value = 231 Unsigned Long long int value = 231 Null pointer

Prawidłowa liczba całkowita funkcji strtoull () składa się z:

  • Opcjonalny znak + lub -.
  • Prefiks 0 dla podstawy ósemkowej (ma zastosowanie tylko wtedy, gdy podstawa = 8 lub 0).
  • Prefiks 0x lub 0X dla szesnastkowej podstawy (ma zastosowanie tylko wtedy, gdy podstawa = 16 lub 0).
  • Sekwencja cyfr i / lub alfabetów (jeśli podstawa jest większa niż 10).

Jeśli argument zawiera znak minus (-) na początku, liczba ujemna jest niejawnie konwertowana na typ typu int long bez znaku, który jest liczbą dodatnią.

Poprawne wartości parametru base to (0, 2, 3,…, 35, 36). Zestaw prawidłowych cyfr dla podstawy 2 to (0, 1), dla podstawy 3 to (0, 1, 2) i tak dalej. W przypadku podstaw zaczynających się od 11 do 36 prawidłowe cyfry obejmują alfabety. Zbiór prawidłowych cyfr dla podstawy 11 to (0, 1,…, 9, A, a), dla podstawy 12 to (0, 1,…, 9, A, a, B, b) i tak dalej.

Przykład 2: funkcja strtoull () z różnymi bazami

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

Po uruchomieniu programu wynik będzie następujący:

 148ax do Długi długi bez znaku z podstawą-5 = 9 Ciąg końcowy = 8ax 148ax do Bez znaku Długi długi Int z podstawą-15 = 4405 Ciąg końcowy = x 148ax do Bez znaku Długi długi Int z podstawą-35 = 1682308 Ciąg końcowy =

Funkcja strtoull () ignoruje wszystkie początkowe białe znaki, dopóki nie zostanie znaleziony główny znak niebędący białymi znakami.

Ogólnie rzecz biorąc, prawidłowy argument będący liczbą całkowitą dla funkcji strtoull () ma następującą postać:

 (białe znaki) (- | +) (0 | 0x) (znaki alfanumeryczne)

Następnie, zaczynając od tego znaku, pobiera jak najwięcej znaków, które tworzą prawidłową reprezentację liczb całkowitych i konwertują je na wartość typu long long int. Cokolwiek pozostało z ciągu po ostatnim prawidłowym znaku, jest ignorowane i nie ma wpływu na wynik.

Przykład 3: funkcja strtoull () dla wiodących białych znaków, minus i nieprawidłowej konwersji

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

Po uruchomieniu programu wynik będzie następujący:

 25axbz do Unsigned Long Long Int z base-11 = 307 End String = xbz -110bcd do Unsigned Long Long Int z base-2 = 18446744073709551610 End String = bcd ax110.97 to Unsigned Long Long Int z base-10 = 0 End String = ax110.97

Jeśli podstawą jest 0, podstawa liczbowa jest określana automatycznie na podstawie formatu ciągu. Jeśli przedrostkiem jest 0, podstawą jest ósemkowa (8). Jeśli prefiks to 0x lub 0X, podstawą jest szesnastkowa (16), w przeciwnym razie podstawa jest dziesiętna (10).

Przykład 4: funkcja strtoull () o podstawie 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; )

Po uruchomieniu programu wynik będzie następujący:

 017x do Długi długi bez znaku z podstawą-0 = 15 Ciąg końcowy = x 0x1cg do Długi ciąg bez znaku z podstawą-0 = 28 Ciąg końcowy = g 70sxz do Bez znaku Długi długi Int z podstawą-0 = 70 Ciąg końcowy = sxz

Interesujące artykuły...