テクノロジーの雑学・豆知識

PC・スマホ、プログラミング、電子機器、電化製品についての雑学・うんちく・豆知識・トリビアを集めたサイトです。気になった記事や文章を個人のメモとして投稿しています

【C言語文例】文字列をlong型に変換するstrtol()の使い方


ヘッダ

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;
}
/****************************************************************************/

<実行結果>