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