名前空間
変種
操作

strtoimax, strtoumax

提供: cppreference.com
< c‎ | string‎ | byte
ヘッダ <inttypes.h> で定義
intmax_t strtoimax( const char *restrict nptr,
                    char **restrict endptr, int base );
(C99およびそれ以降)
uintmax_t strtoumax( const char *restrict nptr,
                     char **restrict endptr, int base );
(C99およびそれ以降)

Interprets an integer value in a byte string pointed to by nptr.

最初の非ホワイトスペース文字が見つかるまで、あらゆるホワイトスペース文字を破棄します (ホワイトスペースは isspace() を呼ぶことによって識別されます)。 その後、有効な base 進数の整数表現を形成する文字を可能な限り多く読み込み、それを整数値に変換します。 有効な整数値は以下のように構成されます。

  • (オプション) 正または負の符号
  • (オプション) 8進数を表す接頭辞 0 (基数が 8 または 0 の場合のみ)
  • (オプション) 16進数を表す接頭辞 0x または 0X (基数が 16 または 0 の場合のみ)
  • 数字の並び

基数に対する有効な値の集合は {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進数です。

入力列の一部に負の符号があった場合、結果の型で単項マイナス演算子によって行われたかのように、その数字列から計算された数値の符号が反転されます。

The functions sets the pointer pointed to by endptr to point to the character past the last character interpreted. If endptr is NULL, it is ignored.

If the nptr is empty or does not have the expected form, no conversion is performed, and (if enptr is not NULL) the value of nptr is stored in the object pointed to by endptr.

目次

[編集] Parameters

nptr - pointer to the null-terminated byte string to be interpreted
endptr - pointer to a pointer to character.
base - base of the interpreted integer value

[編集] Return value

  • If successful, an integer value corresponding to the contents of str is returned.
  • If the converted value falls out of range of corresponding return type, a range error occurs (setting errno to ERANGE) and INTMAX_MAX, INTMAX_MIN, UINTMAX_MAX or 0 is returned, as appropriate.
  • If no conversion can be performed, 0 is returned.

[編集] Example

#include <stdio.h>
#include <inttypes.h>
#include <errno.h>
#include <string.h>
 
int main(void)
{
 
    char* endptr;
 
    printf("%ld\n", strtoimax(" -123junk",&endptr,10)); /* base 10                    */
    printf("%ld\n", strtoimax("11111111",&endptr,2));   /* base 2                     */
    printf("%ld\n", strtoimax("XyZ",&endptr,36));       /* base 36                    */
    printf("%ld\n", strtoimax("010",&endptr,0));        /* octal auto-detection       */
    printf("%ld\n", strtoimax("10",&endptr,0));         /* decimal auto-detection     */
    printf("%ld\n", strtoimax("0x10",&endptr,0));       /* hexadecimal auto-detection */
 
    /* range error             */
    /* LONG_MAX+1 --> LONG_MAX */
    errno = 0;
    printf("%ld\n", strtoimax("9223372036854775808",&endptr,10));
    printf("%s\n", strerror(errno));
 
    return 0;
}

出力:

-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range

[編集] References

  • C11 standard (ISO/IEC 9899:2011):
  • 7.8.2.3 The strtoimax and strtoumax functions (p: 219)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.8.2.3 The strtoimax and strtoumax functions (p: 200)

[編集] See also

ワイド文字列を intmax_t または uintmax_t に変換します
(関数) [edit]
バイト文字列を整数値に変換します
(関数) [edit]
バイト文字列を符号無し整数値に変換します
(関数) [edit]
strtoimax, strtoumaxC++リファレンス