Share via


文字列を数値に変換する関数

更新 : 2007 年 11 月

解説

strtod 系の各関数は、NULL で終わる文字列を数値に変換します。次の表は、使用可能な関数を示します。

関数

説明

strtod

文字列を倍精度の浮動小数点値に変換します。

strtol

文字列を長整数型 (long) に変換します。

strtoul

文字列を符号のない長整数型 (unsigned long) に変換します。

_strtoi64

文字列を 64 ビット __int64 型の整数に変換します。

_strtoui64

文字列を符号のない 64 ビット __int64 型の整数に変換します。

wcstodwcstolwcstoul_wcstoi64 の各関数は、それぞれ strtodstrtolstrtoul、および _strtoi64 関数のワイド文字バージョンです。これらの各ワイド文字関数の文字列引数は、ワイド文字列です。それ以外では、各関数の動作は対応する 1 バイト文字関数の動作と同じです。

strtod 関数は、入力文字列と、変換プロセスを終了する文字へのポインタの 2 つの引数を受け取ります。strtolstrtoul_strtoi64、および _strtoui64 は、変換プロセスで使用する基数として 3 番目の引数を受け取ります。

入力文字列は、指定された型の数値として解釈できる文字の並びにします。各関数は、数値の一部として認識できない文字を最初に見つけた時点で、文字列の読み取りを終了します。数値として認識できない最初の文字が、終端の NULL 文字の場合もあります。strtolstrtoul_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) および必要に応じて符号付き整数で構成されます。指数部と小数点文字のいずれも指定されない場合は、文字列の最後の数字の後に小数点文字が続くと想定されます。この形式に一致しない文字を見つけるとスキャンを停止します。

strtolstrtoul_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

Overflow

+/- HUGE_VAL

strtod

アンダーフローまたは変換なし

0

strtol

+ オーバーフロー

LONG_MAX

strtol

- オーバーフロー

LONG_MIN

strtol

アンダーフローまたは変換なし

0

_strtoi64

+ オーバーフロー

_I64_MAX

_strtoi64

- オーバーフロー

_I64_MIN

_strtoi64

変換なし

0

_strtoui64

Overflow

_UI64_MAX

_strtoui64

変換なし

0

_I64_MAX、_I64_MIN、および _UI64_MAX は、LIMITS.H で定義されています。

wcstodwcstolwcstoul_wcstoi64、および _wcstoui64 の各関数は、それぞれ strtodstrtolstrtoul_strtoi64、および _strtoui64 関数のワイド文字バージョンです。これらのワイド文字関数の変換終了引数へのポインタは、ワイド文字列です。それ以外では、これらのワイド文字関数の動作は、対応する 1 バイト文字関数の動作と同じです。

参照

参照

データ変換

ロケール

マルチバイト文字のシーケンスの解釈

浮動小数点サポート

atof、_atof_l、_wtof、_wtof_l