wcstoull() - ワイド文字ストリングの符号なし long long 整数への変換

標準

標準/拡張機能 C/C++ 依存項目

z/OS® UNIX
C99
Single UNIX Specification、バージョン 3
C++ TR1 C99

両方

OS/390 V2R10

形式

#include <wchar.h>

unsigned long long wcstoull(const wchar_t * __restrict__nptr, 
                            wchar_t ** __restrict__endptr, int base);
コンパイル要件: この関数を使用するには、long long データ型が必要です。long long を使用可能にする方法については、「z/OS C/C++ Language Reference」を参照してください。

機能説明

nptr が指すワイド文字ストリングの初期部分を、符号なし long long 整数表示に変換します。最初に、これは入力ワイド文字ストリングを次の 3 つの部分に分解します。
  1. (iswspace() 関数が指定したとおり)、空の可能性がある空白ワイド文字の 先頭シーケンス。
  2. base の値によって判別されたある基数で表示された、符号なし整数に類似しているサブジェクト・シーケンス。
  3. 入力ワイド文字ストリングの終了 NULL 文字を含む、1 つ以上の認識されないワイド文字の最終ワイド文字ストリング。

その後で、サブジェクト・シーケンスの符号なし long long 整数への変換を試みてから、結果を戻します。

base の値がゼロの場合には、サブジェクト・シーケンスの 想定される形式は ISO/IEC 9899: 条項 6.1.3.2 に記述 されている整数定数の想定される形式で、オプションで前に正符号 (+) または負符号 (-) が付きますが、整数サフィックスは含まれません。base の値が 2 と 36 の間の場合には、サブジェクト・シーケンス の想定される形式は base 別に指定された基数を使用して整数を表示する ポータブル文字セットの一連の文字と数字のシーケンスで、オプションで前に正符号 (+) または負符号 (-) が付きますが、整数サフィックスは含まれません。a (または A) ~ z (または Z) までの文字は値 10 ~ 35 までの値と想定されます。想定された値が base の値より小さい文字だけが許可されます。base の値が 16 の場合には、文字 0x または 0X はオプションで一連の文字および数字の前に付くことがありますが、符号があるとその後に続きます。

サブジェクト・シーケンスは、最初の非空白ワイド文字から始まる、入力ワイド文字ストリングの 最長の初期サブシーケンスとして定義されています。これが想定される形式です。入力ワイド文字ストリングが空であるか、すべて空白文字からなって いるか、あるいは最初の非空白ワイド文字が符号あるいは許可可能な 文字または数字以外である場合には、サブジェクト・シーケンスには ワイド文字は含まれません。

サブジェクト・シーケンスに想定される形式があって、base の値が ゼロの場合には、最初の数字から始まるワイド文字のシーケンスは ISO/IEC 9899: 条項 6.1.3.2 の規則に従って整数定数と解釈されます。サブジェクト・シーケンスに想定される形式があって、base の値が 2 と 36 の間に ある場合には、これは変換の基数として使用され、上に指定された値を各文字に想定します。サブジェクト・シーケンスが負符号 (-) で始まる場合には、変換から生じる値は無効になります。最終ストリングを指すポインターは、endptr が NULL ポインターでない場合に endptr が指すオブジェクトに保管されます。C または POSIX ロケール以外のロケールでは、追加インプリメンテーション定義 のサブジェクト・シーケンス形式が受け入れられることがあります。

サブジェクト・シーケンスが空であるか、想定される形式になっていない場合には、変換は行われません。nptr の値は、endptr が NULL ポインターでない場合に、endptr が指すオブジェクトに保管されます。

このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。

0、および {ULLONG_MAX} がエラーで戻されましたが、0 は正常実行時の有効な戻り値でもあるため、エラー状態を検査するアプリケーションは、errno を 0 に設定し、wcstoull() を呼び出してから、errno を検査する必要があります。

注: wcstoull() 関数は、拡張 ASCII の拡張機能のレベルに依存します。詳細は、拡張 ASCII サポートを参照してください。

戻り値

正常に実行された場合、wcstoull() は、変換された値があれば、それを戻します。

正常に実行されなかった場合、変換が実行できないと、wcstoull() は 0 を戻します。正しい値が表現可能な値の範囲外にある場合には、wcstoull() は ULLONG_MAX (ULONGLONG_MAX) を戻します。基数の値がサポートされない場合、wcstoull() は 0 を戻します。

正常に実行されなかった場合、wcstoull() は errno を次のいずれかの 値に設定します。

エラー・コード
説明
EINVAL
base の値はサポートされません。
ERANGE
変換によってオーバーフローが起きました。

 /* LongLong conversion */
  #define _LONG_LONG 1
  #include <stdio.h>
  #include <wchar.h>

  #define BASE 2

  int main(void)
  {
     wchar_t *wcs = L"1000e13 camels";
     wchar_t **endptr;
     unsigned long long answer;

     answer = wcstoull(wcs, endptr, BASE);
     printf("The input wide string used: `%ls`¥n", wcs);
     printf("The unsigned long long produced: %llu¥n", answer);
     printf("The substring of the input wide string that was not");
     printf(" converted to unsigned long long: `%ls`¥n", *endptr);
  }

関連情報