文字列を数値に変換する関数
解説
strtod 系の各関数は、NULL で終わる文字列を数値に変換します。 次の表は、使用可能な関数を示します。
機能 |
説明 |
---|---|
strtod |
文字列を倍精度の浮動小数点値に変換します。 |
strtol |
文字列を長整数型 (long) に変換します。 |
strtoul |
文字列を符号のない長整数型 (unsigned long) に変換します。 |
_strtoi64 |
文字列を 64 ビット __int64 型の整数に変換します。 |
_strtoui64 |
文字列を符号のない 64 ビット __int64 型の整数に変換します。 |
wcstod、wcstol、wcstoul、_wcstoi64 の各関数は、それぞれ strtod、strtol、strtoul、および _strtoi64 関数のワイド文字バージョンです。 これらの各ワイド文字関数の文字列引数は、ワイド文字列です。それ以外では、各関数の動作は対応する 1 バイト文字関数の動作と同じです。
strtod関数は 2 つの引数を受け取ります。最初に、入力文字列と、2 番目の変換プロセスを終了文字へのポインターです。 strtol、strtoul、_strtoi64、および _strtoui64 は、変換プロセスで使用する基数として 3 番目の引数を受け取ります。
入力文字列は、指定された型の数値として解釈できる文字の並びにします。 各関数は、数値の一部として認識できない文字を最初に見つけた時点で、文字列の読み取りを終了します。 数値として認識できない最初の文字が、終端の NULL 文字の場合もあります。 strtol、strtoul、_strtoi64、および _strtoui64 の各関数では、この終端の文字が、指定した基数以上の最初の数値文字となる場合もあります。
呼び出し時に、変換終了文字へのユーザー指定のポインターを NULL に設定しないと、スキャンを停止させた文字へのポインターが代わりに格納されます。 変換を実行できなかった場合 (有効な数字が見つからない場合、または無効な基数を指定した場合) は、文字列ポインターの値がそのアドレスに格納されます。
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]
引数 base が 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 バイト文字関数の動作と同じです。