strtoul, _strtoul_l, wcstoul, _wcstoul_l

文字列を符号なし長整数の値に変換します。

構文

unsigned long strtoul(
   const char *strSource,
   char **endptr,
   int base
);
unsigned long _strtoul_l(
   const char *strSource,
   char **endptr,
   int base,
   _locale_t locale
);
unsigned long wcstoul(
   const wchar_t *strSource,
   wchar_t **endptr,
   int base
);
unsigned long _wcstoul_l(
   const wchar_t *strSource,
   wchar_t **endptr,
   int base,
   _locale_t locale
);

パラメーター

strSource
NULL で終わる変換対象の文字列。

endptr
スキャンの終了位置を示す文字へのポインター。

base
使用する基数。

locale
使用するロケール。

戻り値

strtoul はオーバーフローについての変換された値 (ある場合) または ULONG_MAX を返します。 変換を実行できない場合、strtoul は 0 を返します。 wcstoul 関数の戻り値は、strtoul 関数の戻り値と同じです。 両方の関数とも、オーバーフローまたはアンダーフローが発生した場合、errnoERANGE に設定されます。

リターン コードの詳細については、「errno_doserrno_sys_errlist、および _sys_nerr」を参照してください。

解説

これらの関数は入力文字列 strSourceunsigned long に変換します。

strtoul では、数値の一部として認識できない文字を最初に見つけた時点で、文字列 strSource の読み取りを停止します。 この文字は終わる NULL文字でも、1 番目以上の数値 baseでもかまいません。 ロケールの LC_NUMERIC カテゴリの設定に基づいて、strSource の小数点文字の認識が決定されます。詳細については、「setlocale」をご覧ください。 strtoulwcstoul は現在のロケールを使用します。_strtoul_l_wcstoul_l は代わりに渡されたロケール使用するという点を除いて機能は同じです。 詳細については、「 Locale」を参照してください。

endptrNULL 以外の場合は、スキャンを停止させた文字へのポインターを endptr が指す位置に格納します。 変換できなかった場合 (有効な数字が見つからなかった場合、または無効な base を指定した場合) は、strSource の値を endptr が指す位置に格納します。

wcstoul 関数は、strtoul 関数のワイド文字バージョンで、strSource 引数はワイド文字列です。 それ以外では、これらの関数の動作は同じです。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tcstoul strtoul strtoul wcstoul
_tcstoul_l strtoul_l _strtoul_l _wcstoul_l

strtoul は、strSource が次の形式の文字列を指すものと想定します。

[whitespace] [{+ | -}] [0 [{ x | X }]] [digits | letters]

whitespace は、空白文字とタブ文字で構成でき、無視されます。 digits は、1 個以上の 10 進数です。 letters は、a から z (または A から Z) の 1 つ以上の文字です。 この形式に一致しない最初の文字でスキャンが停止します。 base が 2 から 36 の間の場合、数値の基数として使用されます。 base が 0 の場合、strSource が指す文字列の先頭の文字を使用して、基数を判断します。 最初の文字が 0 で、2 番目の文字が x または X 以外の場合、文字列は 8 進整数と解釈されます。 最初の文字が '0' で、2 番目の文字が x または X である場合、文字列は 16 進整数と解釈されます。 最初の文字が '1' ~ '9' の間の数値の場合、文字列は 10 進数と解釈されます。 a から z (または A から Z) の文字には、10 から 35 の値が割り当てられています。base よりも小さい値が割り当てられている文字のみが許可されます。 基数の範囲外にある文字を最初に見つけた時点で、スキャンは停止されます。 たとえば、base が 0 で、スキャンされた最初の文字が '0' の場合、8 進数と見なされ、'8' または '9' の文字が出現すると、スキャンは停止されます。 strtoul では正符号 (+) または負符号 (-) のプレフィックスを使用できます。先頭の負符号は戻り値の符号が反転されることを表します。

必要条件

ルーチンによって返される値 必須ヘッダー
strtoul <stdlib.h>
wcstoul <stdlib.h> または <wchar.h>
_strtoul_l <stdlib.h>
_wcstoul_l <stdlib.h> または <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

strtod の例を参照してください。

関連項目

データ変換
ロケール
localeconv
setlocale, _wsetlocale
文字列から数値の関数
strtod, _strtod_l, wcstod, _wcstod_l
strtol, wcstol, _strtol_l, _wcstol_l
atof, _atof_l, _wtof, _wtof_l