41.4 정수를 문자열로 변환하기

이번에는 정수를 문자열 형태로 변환하는 방법입니다. sprintf 함수를 사용하면 정수를 문자열로 변환할 수 있습니다(stdio.h 헤더 파일에 선언되어 있습니다).

  • sprintf(문자열, "%d", 정수);
  • sprintf(문자열, "%x", 정수);
  • sprintf(문자열, "%X", 정수);

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

integer_to_string.c

#define _CRT_SECURE_NO_WARNINGS    // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>     // sprintf 함수가 선언된 헤더 파일

int main()
{
    char s1[10];       // 변환한 문자열을 저장할 배열
    int num1 = 283;    // 283은 정수

    sprintf(s1, "%d", num1);    // %d를 지정하여 정수를 문자열로 저장

    printf("%s\n", s1);         // 283

    return 0;
}

실행 결과

283

먼저 변환한 문자열을 저장할 배열을 선언합니다(동적 메모리를 할당해도 됩니다). 그리고 sprintf 함수에 서식 지정자로 %d를 설정한 뒤 정수를 문자열로 저장합니다.

앞에서 문자열을 정수로 변환하는 atoi 함수가 있었습니다. 물론 반대로 변환하는 itoa같은 함수도 있지만 C 언어 표준 함수는 아닙니다(Visual Studio에서 _itoa로 사용 가능). 따라서 이 책에서는 표준 함수인 sprintf를 사용하였습니다.

정수를 16진법으로 표기된 문자열로 변환하려면 어떻게 해야 할까요? 이때는 서식 지정자로 %x를 사용하면 됩니다.

integer_to_hex_string.c

#define _CRT_SECURE_NO_WARNINGS    // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>     // sprintf 함수가 선언된 헤더 파일

int main()
{
    char s1[10];      // 변환한 문자열을 저장할 배열
    int num1 = 283;   // 283은 정수

    sprintf(s1, "0x%x", num1);    // %x를 지정하여 정수를 16진법으로 표기된 문자열로 저장
                                  // 16진수라는 것을 나타내기 위해 앞에 0x를 붙임

    printf("%s\n", s1);           // 0x11b

    return 0;
}

실행 결과

0x11b

sprintf 함수에 서식 지정자로 %x를 지정하면 정수를 16진법으로 표기된 문자열로 변환할 수 있습니다. 이때 16진수라는 것을 명확하게 나타나기 위해 앞에 "0x" 문자열을 붙여줍니다. 단, "0x"를 붙이지 않아도 상관은 없지만 10진수 100과 알파벳이 섞여 있지 않은 16진수 100은 헷갈리기 쉽습니다.

만약 sprintf(s1, "0x%X", num1);와 같이 서식 지정자를 %X로 지정하면 16진수의 알파벳 부분이 대문자로 저장됩니다.

0x11B