ヘッダ
stdlib.h
書式
long int strtol(const char *nptr, char **endp, int base);
引数
nptr … long型に変換する文字列のポインタ
endp … 変換が完了した位置を示すポインタ
base … 変換する数の基数(何進数に変換するか)
戻り値
成功:変換後の整数(long型)
失敗:0
解説
文字列nptrをlong型に変換する。文字列の中に数値として認識できない文字がある場合、その文字で読み出しを中止し、そのポインタをendpに格納する。
baseが2以上36以下であれば、基数がbaseの値として変換される。例えば、baseの値が10であれば10進数として文字列を変換する。
baseが0の場合は変換する文字列により基数を決定する。文字列の1文字目が0かつ2文字目が1~7の場合は8進数で変換、文字列の1文字目が0かつ2文字目がxまたはXの場合は16進数で変換、文字列の1文字目が1~9の場合は10進数で変換する。変換例は以下の通り。
baseが0、文字列が”011″(先頭が0)の場合 → 8進数で変換 → 9
baseが0、文字列が”0x11″(先頭が0xまたは0X)の場合 → 16進数で変換 → 17
baseが0、文字列が”11″の場合 → 10進数で変換 → 11
<サンプルプログラム>
/****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 変数定義
long int longint_num[8];
char *endp;
int cnt;
longint_num[0] = strtol(“12345”, &endp, 10);
longint_num[1] = strtol(“2147483647”, &endp, 10);
longint_num[2] = strtol(“-1234”, &endp, 10);
longint_num[3] = strtol(“0x10a”, &endp, 0);
longint_num[4] = strtol(“10a”, &endp, 16);
longint_num[5] = strtol(“0100”, &endp, 0);
longint_num[6] = strtol(“100”, &endp, 8);
longint_num[7] = strtol(” 0″, &endp, 0);
for(cnt = 0; cnt < 8; cnt++)
{
printf(“longint_num[%d]:%ld\n”, cnt, longint_num[cnt]);
}
printf(“\n”);
return 0;
}
/****************************************************************************/
<実行結果>