解説
strto* ファミリの各関数は、null で終わる文字列を数値に変換します。 利用できる関数を次の表に示します。
| 関数 | 説明 |
|---|---|
strtod |
文字列を倍精度浮動小数点値に変換する |
strtol |
文字列を long 型整数に変換する |
strtoul |
文字列を unsigned long 型整数に変換する |
_strtoi64 |
文字列を 64 ビット __int64 整数に変換する |
_strtoui64 |
文字列を符号なし 64 ビット __int64 整数に変換する |
wcstod、wcstol、wcstoul、_wcstoi64 は、それぞれ、strtod、strtol、strtoul、_strtoi64 のワイド文字バージョンです。 これらのワイド文字関数の文字列引数はワイド文字です。各関数は、それが 1 バイト文字列の場合と同様に動作します。
strtod関数は 2 つの引数を受け取ります。1 つ目は入力文字列、2 つ目は変換プロセスを終了する文字へのポインターです。 strtol、 strtoul、 _strtoi64 、および _strtoui64 変換プロセスで使用する数値ベースとして 3 番目の引数を受け取ります。
入力文字列は、指定された型の数値として解釈できる文字シーケンスです。 各関数は、数値の一部として認識できない最初の文字で文字列の読み取りを停止します。 この文字は、終端の NULL 文字の場合があります。 strtol、strtoul、_strtoi64、_strtoui64 の場合、この終端文字は、ユーザーが指定した基数と等しいか、それより大きい最初の数字になることもあります。
ユーザーが指定した変換終了文字へのポインターが呼び出し時に NULL または nullptr に設定されていない場合は、スキャンを停止した文字へのポインターが代わりにそこに格納されます。 変換できなかった場合 (有効な数字が見つからなかったか、無効な基数を指定した場合) は、文字列ポインターの値がそのアドレスに保存されます。
strtod は、次の形式の文字列を要求します。
[whitespace] [sign] [digits] [.digits] [{d | D | e | E}[sign]digits]
whitespaceは空白文字またはタブ文字で構成され、無視されます。signはプラス (+) またはマイナス (-)、digitsは 1 桁以上の 10 進数です。 小数点文字の前に数字がない場合は、少なくとも 1 つの数字が小数点文字の後に必要です。 10 進数の後には指数部を指定できます。指数部は、指数部の開始文字 (d、D、e、または E) および必要に応じて符号付き整数で構成されます。 指数部または基数文字が表示されない場合、基数文字は文字列の最後の桁の後にあると見なされます。 この形式に一致しない最初の文字でスキャンが停止します。
strtol、strtoul、_strtoi64、_strtoui64 関数は、次の形式の文字列を要求します。
[whitespace] [{+ | -}] [0 [{ x | X }]] [digits]
基本引数が 2 ~ 36 の場合は、数値の底として使用されます。 0 の場合、変換終了ポインターによって参照される最初の文字を使用して、ベースが決定されます。 最初の文字が 0 で、2 番目の文字が 'x' または 'X' でない場合、文字列は 8 進数として解釈されます。それ以外の場合は、10 進数として解釈されます。 最初の文字が '0' で、2 番目の文字が 'x' または 'X' である場合、文字列は 16 進数と解釈されます。 最初の文字が '1' ~ '9' の間の数値の場合、文字列は 10 進数と解釈されます。 'a' ~ 'z' (または 'A' ~ 'Z') の文字には、10 ~ 35 の値が割り当てられています。base よりも小さい値が割り当てられている文字のみ許可されます。 strtoul と _strtoui64 では正符号 (+) または負符号 (-) のプレフィックスを使用できます。先頭の負符号は戻り値の符号が反転されることを表します。
出力値は、ロケールの LC_NUMERIC カテゴリ設定の設定によって影響を受けます。 詳細については、setlocaleを参照してください。 _l サフィックスが付いていないこれらの関数のバージョンでは、このロケールに依存する動作に現在のロケールを使用します。_l サフィックスが付いているバージョンは、渡されたロケール パラメーターを代わりに使用する点を除いて同じです。
これらの関数によって返される値がオーバーフローまたはアンダーフローを引き起こす場合、または変換できない場合は、次のように特殊なケース値が返されます。
| 機能 | 条件 | 返される値 |
|---|---|---|
strtod |
オーバーフロー | +/- HUGE_VAL |
strtod |
アンダーフローまたは変換なし | 0 |
strtol |
+ オーバーフロー | LONG_MAX |
strtol |
- オーバーフロー | LONG_MIN |
strtol |
アンダーフローまたは変換なし | 0 |
_strtoi64 |
+ オーバーフロー | _I64_MAX |
_strtoi64 |
- オーバーフロー | _I64_MIN |
_strtoi64 |
変換なし | 0 |
_strtoui64 |
オーバーフロー | _UI64_MAX |
_strtoui64 |
変換なし | 0 |
_I64_MAX、 _I64_MIN、および _UI64_MAX は、 <LIMITS.H>で定義されます。
wcstod、wcstol、wcstoul、_wcstoi64、_wcstoui64 はそれぞれ、strtod、strtol、strtoul、_strtoi64、_strtoui64 のワイド文字バージョンです。これらのワイド文字関数の変換終了引数へのポインターはワイド文字です。 ワイド文字関数は、それが 1 バイト文字の場合と同様に動作します。
関連項目
データ変換
ロケール
マルチバイト文字のシーケンスの解釈
数値演算と浮動小数点のサポート
atof、 _atof_l、 _wtof、 _wtof_l