Funkcje konwertowania ciągów na wartości
Uwagi
Każda funkcja w strto*
rodzinie konwertuje ciąg zakończony wartością null na wartość liczbową. Dostępne funkcje są wymienione w poniższej tabeli.
Function | opis |
---|---|
strtod |
Konwertowanie ciągu na wartość zmiennoprzecinkową o podwójnej precyzji |
strtol |
Konwertowanie ciągu na długą liczbę całkowitą |
strtoul |
Konwertowanie ciągu na niepodpisaną długą liczbę całkowitą |
_strtoi64 |
Konwertowanie ciągu na 64-bitową __int64 liczbę całkowitą |
_strtoui64 |
Konwertowanie ciągu na niepodpisaną 64-bitową __int64 liczbę całkowitą |
wcstod
, wcstol
, wcstoul
i _wcstoi64
są wersjami strtod
o szerokim znaku odpowiednio , strtol
, strtoul
i _strtoi64
. Argument ciągu dla każdej z tych funkcji szerokiego znaku jest ciągiem o szerokim znaku; każda funkcja zachowuje się identycznie jak w przeciwnym razie jego odpowiednik jednobajtowy.
Funkcja strtod
przyjmuje dwa argumenty: pierwszy to ciąg wejściowy, a drugi wskaźnik do znaku kończącego proces konwersji. strtol
_strtoi64
, strtoul
i _strtoui64
weź trzeci argument jako bazę liczb do użycia w procesie konwersji.
Ciąg wejściowy to sekwencja znaków, które można interpretować jako wartość liczbową określonego typu. Każda funkcja zatrzymuje odczytywanie ciągu przy pierwszym znaku, który nie może rozpoznać jako części liczby. Ten znak może być znakiem zerowym zakończenia. W przypadku strtol
znaków , strtoul
, _strtoi64
i _strtoui64
ten znak zakończenia może być również pierwszym znakiem liczbowym większym lub równym bazie liczbowej podanej przez użytkownika.
Jeśli wskaźnik dostarczony przez użytkownika na znak końca konwersji nie jest ustawiony na NULL
lub nullptr
w czasie wywołania, wskaźnik do znaku, który zatrzymał skanowanie, zostanie tam zapisany. Jeśli nie można wykonać konwersji (nie znaleziono prawidłowych cyfr lub określono nieprawidłową bazę), wartość wskaźnika ciągu jest przechowywana pod tym adresem.
strtod
oczekuje ciągu następującego formularza:
[whitespace
] [] [sign
] [digits
] [.
digits
{d
| D
| | E
e
}[sign
]]digits
Element whitespace
może składać się z spacji lub znaków tabulacji, które są ignorowane; sign
jest plus (+
) lub minus (-
); i digits
są co najmniej jedną cyfrą dziesiętną. Jeśli żadne cyfry nie są wyświetlane przed znakiem promienia, co najmniej jeden musi pojawić się po znaku promieniowym. Cyfry dziesiętne mogą być następnie wykładnikiem, który składa się z litery wprowadzającej (d
, D
, e
lub E
) i opcjonalnie podpisanej liczby całkowitej. Jeśli nie pojawia się żadna część wykładnicza lub znak promienia, przyjmuje się, że znak promienia jest obserwowany po ostatniej cyfrze w ciągu. Pierwszy znak, który nie pasuje do tego formularza, zatrzymuje skanowanie.
Funkcje strtol
, strtoul
, _strtoi64
i _strtoui64
oczekują ciągu następującego formularza:
[whitespace
] [{+
| -
}] [0
[{ x
| X
}]] [digits
]
Jeśli argument podstawowy mieści się w zakresie od 2 do 36, jest używany jako podstawa liczby. Jeśli jest to 0, początkowe znaki, do których odwołuje się wskaźnik końca konwersji, są używane do określania podstawy. Jeśli pierwszy znak to 0, a drugi znak nie jest "x" lub "X", ciąg jest interpretowany jako liczba całkowita ósemkowa; w przeciwnym razie jest interpretowany jako liczba dziesiętna. Jeśli pierwszy znak to "0", a drugi znak to "x" lub "X", ciąg jest interpretowany jako liczba całkowita szesnastkowa. Jeśli pierwszy znak to od "1" do "9", ciąg jest interpretowany jako liczba całkowita dziesiętna. Litery "a" do "z" (lub "A" do "Z") są przypisane wartości od 10 do 35; tylko litery, których przypisane wartości są mniejsze niż base
dozwolone. strtoul
i _strtoui64
zezwalają na prefiks znaku plus () lub minus (+
-
; wiodący znak minus wskazuje, że zwracana wartość jest negowana.
Na wartość wyjściową ma wpływ ustawienie LC_NUMERIC
ustawienia kategorii ustawień regionalnych. Aby uzyskać więcej informacji, zobacz setlocale
. Wersje tych funkcji bez sufiksu _l
używają bieżących ustawień regionalnych dla tego zachowania zależnego od ustawień regionalnych. Wersje z _l
sufiksem są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast.
Gdy wartość zwrócona przez te funkcje spowoduje przepełnienie lub niedopełnienie lub gdy konwersja nie jest możliwa, zwracane są specjalne wartości wielkości liter, jak pokazano poniżej:
Function | Stan | Zwrócona wartość |
---|---|---|
strtod |
Przepełnienie | +/- HUGE_VAL |
strtod |
Podpełnienie lub brak konwersji | 0 |
strtol |
+ Przepełnienie | LONG_MAX |
strtol |
-Przepełnienie | LONG_MIN |
strtol |
Podpełnienie lub brak konwersji | 0 |
_strtoi64 |
+ Przepełnienie | _I64_MAX |
_strtoi64 |
-Przepełnienie | _I64_MIN |
_strtoi64 |
Brak konwersji | 0 |
_strtoui64 |
Przepełnienie | _UI64_MAX |
_strtoui64 |
Brak konwersji | 0 |
_I64_MAX
, _I64_MIN
i _UI64_MAX
są zdefiniowane w pliku <LIMITS.H>
.
wcstod
, , wcstol
wcstoul
, _wcstoi64
, i _wcstoui64
są wersjami szerokiego strtod
znaku , , strtoul
strtol
, _strtoi64
i _strtoui64
, odpowiednio; wskaźnikiem do argumentu końca konwersji do każdego z tych funkcji szerokiego znaku jest ciąg o szerokim znaku. W przeciwnym razie każda z tych funkcji o szerokim znaku zachowuje się identycznie jak jego odpowiednik z pojedynczym znakiem.
Zobacz też
Konwersja danych
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
atof
, , _atof_l
, , _wtof
_wtof_l