c 문자열 자료형 변경

떵떵·2022년 6월 26일
0

문자열 to 정수형

atoi(문자열)

성공 : 변환된 정수 반환
실패 : 0 반환

예제

int main()
{
	char *s1 = "252";
    int num1;
    
    num1 = atoi(s1);
    
    printf("%d\n", num1);
}
>>> 252

주의

  • 문자열은 중수 이외의 알파벳 영문자, 특수만자 포함되면 해당 문자부터 변환을 하지 않는다.
  • 처음부터 정수가 아니면 0으로 반환된다.
    !23 -> 0
    23! -> 23
    283a30 -> 283
    gd3 -> 0

특정 진법 문자열 to 정수형

strtol(문자열, 끝포인터, 진법);

성공 : 변환된 정수 반환
실패 : 0 반환

예제

int main()
{
	char *s1 = "0x13bc 423 0xaaa";
    int num1;
    int num2;
    int num3;
    char *end; // 이전 숫자의 끝부분을 저장할 포인터
    
    num1 = strtol(s1, &end, 16); end에 변환된정수 0x13bc의 다음 공백부터 끝까지 저장된다.
    num2 = strtol(end, &end, 10); // end = " 0xaaa"
    num3 = strtol(end, NULL, 16); // 다음 숫자는 없으니 NULL로 지정
    
    printf("%x\n", num1);
    printf("%d\n", num2);
    printf("%x\n", num3);
}
>>> 13bc
>>> 423
>>> aaa

처음 변경할 때는 변환할 문자열이 있는 s1을 넣고 끝포인터에 &end로 end의 주소값을 넣어주어 end에 변환한 정수의 끝부분 포인터를 넣어준다.
이후부터 문자열에 변환한 정수의 끝부분부터 계속하기 위해 end를 넣어준다.

주의

s1의 문자열에 넣어 strtol()을 사용해도 s1의 문자열은 훼손되지 않는다.
자체적으로 함수가 문자열을 읽어서 반환할 뿐이다.

문자열 to 실수

atof(문자열);

성공 : 변환된 실수를 반환
실패 : 0을 반환

예제

int main()
{
	char *s1 = [3.14523];
    float num1;
    
    num1 = atof(s1);
    
    printf("%f\n", num1);
}
>>> 3.14523

위 문자열 to 정수랑 같음

여러 실수 문자열 to 실수

strtof(문자열, 끝포인터);

성공 : 변환된 실수 반환
실패 : 0 반환

예제

int main()
{
	char *s1 = 3.142 3.e5 88.1201"
    float num1;
    float num2;
    float num2;
    char *end;
    
    num1 = strtof(s1, &end);
    num2 = strtof(end, &end);
    num3 = strtof(end, NULL);
    
    printf("%f\n", num1);
    printf("%e\n", num2);
    printf("%f\n", num3);
}
>>> 3.142
>>> 3.e5
>>> 88.1201

위 여러 진법 문자열 to 정수랑 비슷하다.

0개의 댓글