wcstol() - wcstoll() — ワイド文字ストリングから long 型および long long 型整数への変換

フォーマット (wcstol())

#include <wchar.h>
long int wcstol(const wchar_t *nptr, wchar_t **endptr, int base);

フォーマット (wcstoll())

#include <wchar.h>
long long int wcstoll(const wchar_t *nptr, wchar_t **endptr, int base);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

コンパイル・コマンドで LOCALETYPE(*LOCALE) が指定される場合、これらの関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。また、コンパイル・コマンドで LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) が指定される場合、これらの関数の振る舞いは、現行ロケールの LC_UNI_CTYPE カテゴリーの影響も 受ける可能性があります。これらの関数は、 コンパイル・コマンドで LOCALETYPE(*CLD) が指定される場合には使用できません。詳細については、CCSID およびロケールの理解を参照してください。

ワイド文字関数

詳細については、ワイド文字を参照してください。

説明

wcstol() 関数は、 nptr が指すワイド文字ストリングの先頭部分を long 型整数値に変換します。 nptr パラメーターにより、long 型整数の数値として解釈できる ワイド文字のシーケンスが示されます。wcstol() 関数は、数値として認識できない ワイド文字に遭遇すると、その時点でストリングの読み取りを停止します。 この文字は、ストリングの最後にある wchar_t ヌル文字である場合があります。 また、基数以上の数字が最初に登場した場合、その数字が終了文字になる場合もあります。

wcstoll() 関数は、ワイド文字ストリングを long long 型整数に変換します。ワイド文字ストリングは、iswspace 関数によって判別された最初のスペース文字をスキップするように解析されます。スペース以外の 文字の場合には、サブジェクト・ストリングが開始されます。これによって、base パラメーターで指定された基数で、long long 型整数が形成されます。サブジェクト・シーケンスは、想定した形式の long long 型整数である最長の初期サブストリングになるように定義されています。

endptr パラメーターの値がヌルでない場合、 走査を終了した文字へのポインターは endptr に保管されます。long long 型整数を形成できない場合、endptr パラメーターの値は、nptr パラメーターの値に設定されます。

base パラメーターの値が 236 の間の場合には、サブジェクト・シーケンスの想定される形式は、基数が base パラメーターで指定される long long 型整数を表す 文字と数字のシーケンスです。このシーケンスは、オプションで先頭に正符号 (+) または 負符号 (-) が付きます。a (または A) から z (または Z) までの文字は 10 から 35 までの値と見なされます。この値が base パラメーターの値より小さい文字だけが許可されます。base パラメーターの値が 16 の場合には、文字 0x または 0X はオプションで一連の文字および数字の前に付くことがありますが、 正符号 (+) または負符号 (-) があるとその後に続きます。

base パラメーターの値が 0 である場合には、ストリングによって base が決定されます。したがって、最初の符号 (オプション) の後で、0 から始まっている場合は 8 進変換を表し、0x または 0X で始まっている場合は 16 進変換を表すことになります。

戻り値

wcstol() 関数は、変換された long 型整数値を戻します。変換が実行できない場合、 wcstol() 関数は 0 を戻します。正しい値が表示可能な値の範囲外にある場合は、 wcstol() 関数は LONG_MAX または LONG_MIN を値の符号に応じて戻し、 errno を ERANGE に設定します。nptr が指すストリングが空であるか、想定される形式になっていない場合には、 変換は行われません。nptr の値は、 endptr が NULL ポインターでない場合に endptr が指すオブジェクトに保管されます。

正常終了の場合、wcstoll() 関数は変換された値を戻します。変換が行われない場合には、0 が戻され、 errno グローバル変数はエラーを示すように設定されます。正しい値が表現可能である範囲外にある場合、wcstoll() 関数は LONG_LONG_MAX または LONG_LONG_MIN の値を戻します。

errno の値は ERANGE (範囲エラー) または EINVAL (無効な引数) に設定される可能性があります。

この例では wcstol() 関数を使用して、ワイド文字ストリング wcs を long 型整数値に変換します。
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
   wchar_t *wcs = L"10110134932";
   wchar_t *stopwcs;
   long     l;
   int      base;
 
   printf("wcs = ¥"%ls¥"¥n", wcs);
   for (base=2; base<=8; base*=2) {
      l = wcstol(wcs, &stopwcs, base);
      printf("   wcstol = %ld¥n"
             "   Stopped scan at ¥"%ls¥"¥n¥n", l, stopwcs);
   }
   return 0;
 
   /*******************************************************
      The output should be similar to:
 
      wcs = "10110134932"
         wcstol = 45
         Stopped scan at "34932"
 
         wcstol = 4423
         Stopped scan at "4932"
 
         wcstol = 2134108
         Stopped scan at "932"
   *******************************************************/
}