고흐의 연구실/C언어와 C++

[C언어] 문자열을 수로 변환 atoi(), strtol(), atof(), strtof(), strtod()

전고흐 2020. 8. 9. 02:10
728x90

atoi()

  • 10진법으로 표기된 문자열을 정수로 변환
  • atoi(문자열);
  • 헤더 : stdlib.h
    • int atoi(char const *_String);
    • 성공하면 변환된 정수를 반환, 실패하면 0을 반환
    • 숫자가 아니어도 0을 반환
#include <stdio.h>
#include <stdlib.h> // atoi 함수가 선언된 헤더 파일
int main()
{
    char *s1 = "283"; // "283"은 문자열
    int num1;
    num1 = atoi(s1); // 문자열을 정수로 변환하여 num1에 할당
    printf("%d\n", num1); // 283
    return 0;
}

 

strtol()

  • 16진법으로 표기된 문자열을 정수로 변환
  • strtol(문자열, 끝포인터, 진법);
  • 헤더 : stdlib.h
    • long strtol(char const *_String, char **_EndPtr, int _Radix);
    • 성공하면 변환된 정수를 반환, 실패하면 0을 반환
#include <stdio.h>
#include <stdlib.h> // strtol 함수가 선언된 헤더 파일
int main()
{
    char *s1 = "0xaf10"; // "0xaf10"은 문자열
    int num1;
    num1 = strtol(s1, NULL, 16); // 16진법으로 표기된 문자열을 정수로 변환
    printf("%x %d\n", num1, num1); // af10 44816
    return 0;
}
#include <stdio.h>
#include <stdlib.h> // strtol 함수가 선언된 헤더 파일
int main()
{
    char *s1 = "0xaf10 42 0x27C 9952"; // "0xaf10 42 0x27C 9952"는 문자열
    int num1; int num2; int num3; int num4;

    char *end; // 이전 숫자의 끝 부분을 저장하기 위한 포인터
    num1 = strtol(s1, &end, 16); // 16진법으로 표기된 문자열을 정수로 변환
    num2 = strtol(end, &end, 10); // 10진법으로 표기된 문자열을 정수로 변환
    num3 = strtol(end, &end, 16); // 16진법으로 표기된 문자열을 정수로 변환
    num4 = strtol(end, NULL, 10); // 10진법으로 표기된 문자열을 정수로 변환

    printf("%x\n", num1); // af10
    printf("%d\n", num2); // 42
    printf("%X\n", num3); // 27C
    printf("%d\n", num4); // 9952
    return 0;
}

 

atof()

  • 문자열을 실수로 바꿀 수 있음
  • atof(문자열);
  • 헤더 : stdlib.h
    • double atof(char const *_String);
    • 성공하면 변환된 실수를 반환, 실패하면 0을 반환
#include <stdio.h>
#include <stdlib.h> // atof 함수가 선언된 헤더 파일
int main()
{
    char *s1 = "35.283672"; // "35.283672"은 문자열
    float num1; num1 = atof(s1); // 문자열을 실수로 변환하여 num1에 할당
    printf("%f\n", num1); // 35.283672
    return 0;
}

 

strtof()

  • 여러개의 실수로 된 문자열을 실수로 바꿀 수 있음
  • strtof(문자열, 끝포인터);
  • 헤더 : stdlib.h
    • float strtof(char const *_String, char **_EndPtr);
    • 성공하면 변환된 실수를 반환, 실패하면 0을 반환
#include <stdio.h>
#include <stdlib.h> // strtof 함수가 선언된 헤더 파일
int main()
{
    char *s1 = "35.283672 3.e5 9.281772 7.e-5"; // "35.283672 3.e5f 9.2817721 7.e-5f"는 문자열
    float num1; float num2; float num3; float num4;
    char *end; // 이전 숫자의 끝 부분을 저장하기 위한 포인터

    num1 = strtof(s1, &end); // 문자열을 실수로 변환
    num2 = strtof(end, &end); // 문자열을 실수로 변환
    num3 = strtof(end, &end); // 문자열을 실수로 변환
    num4 = strtof(end, NULL); // 문자열을 실수로 변환

    printf("%f\n", num1); // 35.283672
    printf("%e\n", num2); // 3.000000e+05
    printf("%f\n", num3); // 9.281772
    printf("%e\n", num4); // 7.000000e-05
    return 0;
}

 

strtod()

  • 문자열을 double형 실수로 변환(strtof와 사용법 같음)
  • strtod(문자열, 끝포인터);
    • double strtod(char const *_String, char **_EndPtr);
    • 성공하면 변환된 실수를 반환, 실패하면 0을 반환
728x90