std::strtoimax, std::strtoumax
From cppreference.com
| ヘッダー <cinttypes> で定義 |
||
| std::intmax_t strtoimax( const char* nptr, char** endptr, int base ); |
(1) | (C++11以降) |
| std::uintmax_t strtoumax( const char* nptr, char** endptr, int base ); |
(2) | (C++11以降) |
nptr によって指されるバイト文字列を整数値として解釈します。
std::isspace の呼び出しで識別される空白文字をすべて破棄し、最初の非空白文字が見つかるまで解析を進めます。その後、有効な基数n(n=base)の整数表現を形成するために可能な限り多くの文字を取得し、それらを整数値に変換します。有効な整数値は、以下の部分で構成されます。
- (任意)プラスまたはマイナスの記号
- (オプション) 8進数を表す接頭辞(
0)(基数が8または0の場合にのみ適用されます) - (オプション) 16進数を表す接頭辞(
0xまたは0X)(基数が16または0の場合にのみ適用されます) - 数字のシーケンス
baseの有効な値のセットは{0, 2, 3, ..., 36}です。基数2の整数の有効な数字のセットは{0, 1}、基数3の整数は{0, 1, 2}などです。10より大きい基数では、有効な数字にはアルファベット文字が含まれ、基数11の整数ではAaから始まり、基数36の整数ではZzまでとなります。大文字・小文字は区別されません。
現在インストールされているC ロケールによって、追加の数値形式が受け入れられる場合があります。
baseの値が0の場合、数値基数は自動検出されます。接頭辞が0の場合は8進数、接頭辞が0xまたは0Xの場合は16進数、それ以外の場合は10進数とみなされます。
入力シーケンスにマイナス記号が含まれていた場合、数字のシーケンスから計算された数値は、結果の型における単項マイナス演算子によるかのように否定されます。
endptr が指すポインタは、解釈された最後の文字の次の文字を指すように設定されます。endptr がヌルポインタの場合、無視されます。
nptr が空であるか、期待される形式ではない場合、変換は実行されません。そして(endptr がヌルポインタでない場合)nptr の値が endptr が指すオブジェクトに格納されます。
目次 |
[編集] パラメータ
| nptr | - | 解釈されるヌル終端バイト文字列へのポインタ |
| endptr | - | 文字へのポインタへのポインタ。 |
| base | - | 解釈される整数値の基数 |
[編集] 戻り値
- 成功した場合、str の内容に対応する整数値が返されます。
- 変換された値が対応する戻り値の型を超えた範囲にある場合、範囲エラーが発生します(errno が ERANGE に設定されます)。そして、適切な値として INTMAX_MAX、INTMAX_MIN、UINTMAX_MAX、または 0 が返されます。
- 変換が実行できない場合、0が返されます。
[編集] 例
このコードを実行
#include <cinttypes> #include <iostream> #include <string> int main() { std::string str = "helloworld"; std::intmax_t val = std::strtoimax(str.c_str(), nullptr, 36); std::cout << str << " in base 36 is " << val << " in base 10\n"; char* nptr; val = std::strtoimax(str.c_str(), &nptr, 30); if (nptr != &str[0] + str.size()) std::cout << str << " in base 30 is invalid." << " The first invalid digit is '" << *nptr << "'\n"; }
出力
helloworld in base 36 is 1767707668033969 in base 10 helloworld in base 30 is invalid. The first invalid digit is 'w'
[編集] 関連項目
| (C++11)(C++11)(C++11) |
文字列を符号付き整数に変換する (function) |
| (C++11)(C++11) |
文字列を符号なし整数に変換する (function) |
| (C++11) |
バイト文字列を整数値に変換する (関数) |
| (C++11) |
バイト文字列を符号なし整数値に変換する (関数) |
| (C++11)(C++11) |
ワイド文字列をstd::intmax_tまたはstd::uintmax_tに変換する (関数) |
| バイト文字列を浮動小数点値に変換する (関数) | |
| (C++17) |
文字シーケンスを整数値または浮動小数点数値に変換する (関数) |
| (C++11) |
バイト文字列を整数値に変換する (関数) |
| C のドキュメント strtoimax, strtoumax
| |