본문 바로가기
프로그래밍/C

C ] strtol, strtoul : 정수 문자열을 진수 선택하여 long/unsigned long 값으로 변환

by eteo 2023. 1. 15.

 

 

strtol 함수는 정수로 구성된 문자열 str을 세번째 파라미터인 진수체계로 판단하여 long 형식 값으로 반환한다. 더이상 계산할 수 없는 문자를 발견하면 두번째 파라미터인 endptr에 해당 위치를 저장한다.

 

#include <stdlib.h>

long strtol (const char* str, char** endptr, int base);

 

파라미터

  • str : long 형식 값을 구할 문자열
  • endptr : 계산을 끝낸 위치를 저장할 문자열
  • base : 진수

리턴 값 : 계산된 long 형식 값

 

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char src[100]="123 ff 16 1001 -10";
    char *pos=NULL;
    long value1=0,value2=0,value3=0,value4=0, value5=0;

    value1 = strtol(src,&pos,10); // 10진수로 계산
    value2 = strtol(pos,&pos,16); // 16진수로 계산
    value3 = strtol(pos,&pos,8); // 8진수로 계산
    value4 = strtol(pos,&pos,2); // 2진수로 계산
    value5 = strtol(pos,&pos,10); // 음수값 10진수로 계산
    
    printf("%ld %ld %ld %ld %ld\n",value1,value2,value3,value4, value5);
    
    return 0;
}

 

 

 

 

strtoul 함수는 정수로 구성된 문자열 str을 세번째 파라미터인 진수체계로 판단하여 unsigned long 형식 값으로 반환한다. 더이상 계산할 수 없는 문자를 발견하면 두번째 파라미터인 endptr에 해당 위치를 저장한다.

 

#include <stdlib.h>
unsigned long strtoul(const char *nptr,char **endptr,int base);

파라미터

  • str : unsigned long 형식 값을 구할 문자열
  • endptr : 계산을 끝낸 위치를 저장할 문자열
  • base : 진수

리턴 값 : 계산된 unsigned  long 형식 값

 

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char src[100] = "123 ff 16 1001 8A7B6C5D";
    char *pos = NULL;
    unsigned long value1 = 0, value2 = 0, value3 = 0, value4 = 0, value5 = 0;

    value1 = strtol(src, &pos, 10); // 10진수로 계산
    value2 = strtol(pos, &pos, 16); // 16진수로 계산
    value3 = strtol(pos, &pos, 8); // 8진수로 계산
    value4 = strtol(pos, &pos, 2); // 2진수로 계산
    value5 = strtol(pos, &pos, 16); // 16진수로 계산해서 16진수로 출력
    
    printf("%lu %lu %lu %lu %08lX\n", value1, value2, value3, value4, value5);

    return 0;
}

 

이와 비슷한 기능으로 strtod, strtof, strtold, strtol, strtoll, strtoul, strtoull 함수가 존재한다.

 

string to double / float / long double / long / long long / unsigned long / unsigned long long 으로 구분하면 편하다.

 

 

 

출처  : https://ehpub.co.kr/strtol-%ED%95%A8%EC%88%98/