strtoul() - ストリングの符号なし整数への変換

標準

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

Language Environment
ISO C
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3

両方  

形式

#include <stdlib.h>

unsigned long int strtoul(const char * __restrict__ string1, 
                          char ** __restrict__ string2, int base);

機能説明

文字ストリング、string1 を、unsigned long int 値に 変換します。

関数により、ストリング全体が次のような 3 つの部分に分解 されます。
  1. 文字のシーケンス。現行ロケールで空白文字と定義されます。この部分は空の場合があります。
  2. いくつかの基数表記で、符号なし整数として解釈される文字の シーケンス。これは、サブジェクト・シーケンス です。
  3. 認識されない文字のシーケンス。
基数がゼロより大きい場合には、基数表記は base に より決まります。基数がゼロの場合には、基数表記は、オプションの正符号または 負符号の後の、文字のシーケンスの形式によって決まります。
10
シーケンスは、ゼロ以外の 10 進数で開始します。
8
シーケンスは 0 で開始し、後ろに 0 ~ 7 の値の数字の シーケンスが続きます。
16
シーケンスは 0x または 0X のどちらか で開始します。後ろには数字、および AF または af の文字が続きます。

基数がゼロより大きい場合には、サブジェクト・シーケンス には、正符号または負符号のどちらかが前にあると考えられる 10 進数字および文字が含まれます。文字 a (または A) ~ z (または Z) により、10 ~ 36 の値が表されますが、基数の値より小さい値の文字だけが許可されます。関数によって、数値の一部として認識できないストリングは、先頭文字 のところで読み取りが停止されます。この文字は、base より大か等しい最初の数字である場合 があります。変換が実行される場合、string2 が NULL 以外のポインターの場合は、結果出力ストリングの終了を示すために、strtoul() 関数によって string2 が ポイントに設定されます。

strtoul() 関数を使用する際には、string1 を使って、次の形式のストリングを示す必要があります。
構文図を読む構文図をスキップする
>>-+-------------+--+-----+--+----+--+--------+----------------><
   '-white space-'  +- + -+  +-0--+  '-digits-'   
                    '- - -'  +-0x-+               
                             '-0X-'               

base が 2 ~ 36 の範囲である場合は、それが数値の基数になります。base が 0 の場合には、次のように接頭部により 基数 (8、16、または 10) が判別されます。接頭部 0 は基数 8 を意味します。接頭部 0x または 0X は基本 16 を意味します。接頭部なしのその他の数字の 使用は 10 進数を意味します。

string2 が NULL 以外のポインターであるかぎり、変換が たとえ正常に実行されなかったとしても、変換文字のポインターは、string2 で示されるオブジェクトに保管されます。

戻り値

正常に実行された場合、strtoul() は、ストリングで表される変換後の unsigned long int 値を戻します。

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

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

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

CELEBS56
⁄* CELEBS56                                      

   This example converts the string to an unsigned long value.                  
   It prints out the converted value and the substring that                     
   stopped the conversion.                                                      
                                                                                
 *⁄                                                                             
#include <stdio.h>                                                              
#include <stdlib.h>                                                             
                                                                                
#define BASE 2                                                                  
                                                                                
int main(void)                                                                  
{                                                                               
   char *string, *stopstring;                                                   
   unsigned long ul;                                                            
                                                                                
   string = "1000e13 e";                                                        
   printf("string = %s¥n", string);                                             
   ul = strtoul(string, &stopstring, BASE);                                     
   printf("   strtoul = %ld (base %d)¥n", ul, BASE);                            
   printf("   Stopped scan at %s¥n¥n", stopstring);                             
}                                                                               
出力:
string = 1000e13 e
   strtoul = 8 (base 2)
   Stopped scan at e13 e

関連情報