次の方法で共有


_strtoui64_wcstoui64_strtoui64_l_wcstoui64_l

文字列を unsigned __int64 値に変換します。

構文

unsigned __int64 _strtoui64(
   const char *strSource,
   char **endptr,
   int base
);
unsigned __int64 _wcstoui64(
   const wchar_t *strSource,
   wchar_t **endptr,
   int base
);
unsigned __int64 _strtoui64_l(
   const char *strSource,
   char **endptr,
   int base,
   _locale_t locale
);
unsigned __int64 _wcstoui64_l(
   const wchar_t *strSource,
   wchar_t **endptr,
   int base,
   _locale_t locale
);

パラメーター

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

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

base
使用する基数。

locale
使用するロケール。

戻り値

_strtoui64 は、オーバーフローを引き起こす場合を除き、文字列 strSource で表現される値を返します。オーバーフローの場合は、_UI64_MAX を返します。 変換を実行できない場合、_strtoui64 は 0 を返します。

_UI64_MAX は、 LIMITS.Hで定義されます。

strSourceNULL または base がゼロ以外で 2 未満または 36 を超える場合、errnoEINVAL に設定されます。

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

解説

_strtoui64 関数は、strSourceunsigned __int64 に変換します。 _wcstoui64 関数は、_strtoui64 関数のワイド文字バージョンで、strSource 引数はワイド文字列です。 それ以外では、これらの関数の動作は同じです。

どちらの関数も、数値の一部として認識できない最初の文字で strSource 文字列の読み取りを停止します。 終端の null 文字、または base以上の最初の数値を指定できます。

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

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

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tcstoui64 _strtoui64 _strtoui64 _wcstoui64
_tcstoui64_l _strtoui64_l _strtoui64_l _wcstoui64_l

現在のロケールの LC_NUMERIC カテゴリ設定は、 strSourceでの基数文字の認識を決定します。詳細については、「 setlocale」を参照してください。 _l サフィックスが付いていない関数は、現在のロケールを使用します。_strtoui64_l および _wcstoui64_l は、渡されたロケールを使用することを除いて、_l サフィックスが付いていない対応する関数と同じです。 詳細については、「 Locale」を参照してください。

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

_strtoui64 は、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' の文字が出現すると、スキャンは停止されます。

要件

機能 必須ヘッダー
_strtoui64 <stdlib.h>
_wcstoui64 <stdlib.h> または <wchar.h>
_strtoui64_l <stdlib.h>
_wcstoui64_l <stdlib.h> または <wchar.h>

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

// crt_strtoui64.c
#include <stdio.h>

unsigned __int64 atoui64(const char *szUnsignedInt) {
   return _strtoui64(szUnsignedInt, NULL, 10);
}

int main() {
   unsigned __int64 u = atoui64("18446744073709551615");
   printf( "u = %I64u\n", u );
}
u = 18446744073709551615

関連項目

データ変換
ロケール
localeconv
setlocale, _wsetlocale
文字列から数値の関数
strtod_strtod_lwcstod_wcstod_l
strtoul_strtoul_lwcstoul_wcstoul_l
atof_atof_l_wtof_wtof_l