Funkcja wcstoull () w C ++ interpretuje zawartość szerokiego ciągu jako liczbę całkowitą bez znaku określonej podstawy i zwraca jego wartość jako długie int bez znaku.
Funkcja wcstoull () ustawia również wskaźnik wskazujący pierwszy znak po ostatnim prawidłowym znaku szerokiego ciągu, jeśli taki istnieje, w przeciwnym razie wskaźnik jest ustawiany na null.
Dla podstawy 10 i szerokiego ciągu L "29hi $" Prawidłowa część numeryczna -> 29 Pierwszy znak po prawidłowej części numerycznej -> h
Jest zdefiniowany w pliku nagłówkowym.
prototyp wcstoull ()
unsigned long wcstoull (const wchar_t * str, wchar_t ** str_end, int base);
Funkcja wcstoull () przyjmuje jako parametr szeroki łańcuch, wskaźnik do szerokiego znaku str_end i wartość całkowitą - base.
Następnie interpretuje zawartość szerokiego ciągu jako liczbę całkowitą bez znaku danej podstawy i zwraca wartość typu long int bez znaku.
wcstoull () Parametry
- str: Szeroki ciąg mający reprezentację liczby całkowitej bez znaku.
- str_end: wskaźnik do wskaźnika do szerokiego znaku. Wartość str_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.
- podstawa: podstawa wartości całkowitej. Zestaw poprawnych wartości dla podstawy to (0, 2, 3,…, 35, 36).
wcstoull () Wartość zwracana
Funkcja wcstoull () zwraca:
- unsigned 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 wcstoull ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"101aau16b6"; wchar_t str2() = L"59"; wchar_t *end; unsigned long long value; int base = 10; value = wcstoull(str1, &end, base); wcout << L"String value = " << str1 << endl; wcout << L"Unsigned Long Long Int value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstoull(str2, &end, base); wcout << L"String value = " << str2 << endl; wcout << L"Unsigned Long Long Int value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Po uruchomieniu programu wynik będzie następujący:
Wartość ciągu = 101aa ᚶ Wartość ciągu bez znaku Długi Długi Int = 101 Ciąg końcowy = aa ᚶ Wartość ciągu = 59 Wartość Długi Ciąg bez znaku = 59 Koniec Ciąg =
Prawidłowa liczba całkowita funkcji wcstoull () 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 wcstoull () z różnymi bazami
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t *end; wchar_t str() = L"311bzu03feu03ff"; wcout << str << L" to Unsigned Long Long Int with base-5 = " << wcstoull(str, &end, 5) << endl; wcout << L"End String = " << end << endl << endl; wcout << str << L" to Unsigned Long Long Int with base-12 = " << wcstoull(str, &end, 12) << endl; wcout << L"End String = " << end << endl << endl; wcout << str << L" to Unsigned Long Long Int with base-36 = " << wcstoull(str, &end, 36) << endl; wcout << L"End String = " << end << endl << endl; return 0; )
Po uruchomieniu programu wynik będzie następujący:
311bzϾϿ do Unsigned Long Long Int z base-5 = 81 End String = bzϾϿ 311bzϾϿ to Unsigned Long Long Int z podstawą-12 = 5351 End String = zϾϿ 311bzϾϿ do Unsigned Long Long Int z base-36 = 5087231 End String = ϾϿ
Funkcja wcstoull () ignoruje wszystkie wiodące 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ą funkcji wcstoull () ma następującą postać:
(białe znaki) (- | +) (0 | 0x) (znaki alfanumeryczne)
Następnie, zaczynając od tego znaku, przyjmuje jak najwięcej znaków, które tworzą prawidłową reprezentację liczby całkowitej i konwertują je na wartość typu long int bez znaku. Cokolwiek pozostało z ciągu po ostatnim prawidłowym znaku, jest ignorowane i nie ma wpływu na wynik.
Przykład 3: funkcja wcstoull () dla wiodących białych znaków i nieprawidłowej konwersji
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t *end; wcout << L" 205u03e2x to Unsigned Long Long Int with base-5 = " << wcstoull(L" 205u03e2x", &end, 5) << endl; wcout << L"End String = " << end << endl << endl; wcout << L"xu019cz201 to Unsigned Long Long Int with base-12 = " << wcstoull(L"xu019cz201", &end, 12) << endl; wcout << L"End String = " << end << endl << endl; return 0; )
Po uruchomieniu programu wynik będzie następujący:
205Ϣx do Długi długi bez znaku z podstawą-5 = 10 Ciąg końcowy = 5Ϣx xƜz201 do Bez znaku Długi długi Int z podstawą-12 = 0 Ciąg końcowy = xƜz201
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 wcstoull () o podstawie 0
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t *end; wcout << L"0539u1e84 to Unsigned Long Long Int with base-0 = " << wcstoull(L"0539u1e84", &end, 0) << endl; wcout << L"End String = " << end << endl << endl; wcout << L"0xa31u05e2 to Unsigned Long Long Int with base-0 = " << wcstoull(L"0xa31u05e2", &end, 0) << endl; wcout << L"End String = " << end << endl << endl; wcout << L"119xu060f to Unsigned Long Long Int with base-0 = " << wcstoull(L"119xu060f", &end, 0) << endl; wcout << L"End String = " << end << endl << endl; return 0; )
Po uruchomieniu programu wynik będzie następujący:
0539Ẅ do Długi ciąg bez znaku z podstawą-0 = 43 Ciąg końcowy = 9Ẅ 0xa31 ע do Długi ciąg bez znaku z podstawą-0 = 2609 Ciąg końcowy = ע 119x ؏ do Długi ciąg bez znaku z podstawą-0 = 119 Ciąg końcowy = x ؏