본문 바로가기

Programming/C C++

[C, C++] 표준 Library 함수 - 각종 변환 함수

아래 함수 사용을 위해서는 stdlib.h Header File선언이 필요합니다.

 함수  사용  설명
 atoi()  atoi(s1);  s1문자열을 int형으로 변환합니다.
 atol()  atol(s1);  s1문자열을 long int형으로 변환합니다.
 atof()  atof(s1);  s1문자열을 float형으로 변환합니다.
 strtol()  strtol(s1, p, i);  s1문자열을 i에 지정된 형태로 수치를 long 변환하고 변환할 수 없는 부분은 pointer p로 반환합니다.
 strtoul()  strtoul(s1, p, i);  s1문자열을 i에 지정된 형태로 수치를 unsigned long 변환하고 변환할 수 없는 부분은 pointer p로 반환합니다.
 strtod()  strtod(s1, p);  s1문자열을 double형으로 변환하고 변환할 수 없는 부분은 pointer p로 반환합니다.

각 함수의 인수중 s1은 문자열을 p는 Pointer를 의미하며 i는 특정진수형을 의미합니다.

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

main()
{
  char s[5] = "1234";
 
  printf("%d\n", atoi(s) + 10);
}


atoi()함수로 문자열 1234를 정수로 변환한뒤 10을 더한 결과를 출력합니다.


atoi(), atol(), atof()함수는 변환할 수 없는 문자를 만나면 그 이전까지 변환한 결과만을 반환합니다.

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

main()
{
  char s[6] = "12k34";
 
  printf("%d\n", atoi(s));
}


12다음에 문자 k가 있습니다.(숫자 형태가 아닌 k는 int형으로 변환이 불가능합니다.)


k 문자 이전의 12까지만 변환하고 그 다음은 무시합니다.

ato로 시작하는 변환함수는 변환할 수 없는 부분을 만나면 이를 무시하지만 strto로 시작하는 함수는 변환할 수 없는 문자를 만나면 해당 주소값을 Pointer로 반환합니다.

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

main()
{
  char s[10] = "1234korea";
  char *p;
 
  printf("%d\n", strtol(s, &p, 10));
  printf("%s\n", p);
}


1234 이후부터의 korea는 long형(10l진수)으로 변환할 수 없습니다.


1234까지만 변환하고 나머지는 Pointer로 반환합니다.

만일 반환되는 Pointer가 필요없다면 NULL을 인수로 지정해 주면 됩니다.

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

main()
{
  char s[10] = "1234korea";
 
  printf("%d\n", strtol(s, NULL, 10));
}


반환되는 Pointer없음


strtol()이나 strtoul()함수 사용시 변환하고자 하는 진수가 있으면 해당 진수를 8, 16, 10의 형태로 지정해 줄 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
main()
{
  char s[10] = "1234korea";
  char *p;
 
  printf("%d\n", strtol(s, &p, 8));
  printf("%s\n", p);
}

strtol(s, &p, 10)에서 strtol(s, &p, 8)로 지정하여 해당 인수를 8진수로 변환하도록 합니다.


변환진수를 지정하지 않고 전달되어오는 인수의 진수형태로 맞추고 싶다면 0을 지정합니다.

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

main()
{
  char s[10] = "0123korea";
  char *p;
 
  printf("%d\n", strtol(s, &p, 0));
  printf("%s\n", p);
}


strtol에 0을 지정하여 인수의 형태에 따라 변환진수를 결정하도록 합니다.


인수의 0123korea 문자열중 변환가능한 부분은 0123입니다. 이때 C언어에서 수치가 0으로 시작하면 8진수로 인식하게 되므로 해당 인수를 8진수로 변환하게 됩니다.