이 글에서는 C++에서 정수를 16진수 문자열로 변환하는 방법을 알아봅니다. 수학적인 계산 과정을 직접 구현할 수도 있지만, 여기서는 훨씬 간단한 방법을 사용해 문제를 해결해 보겠습니다.
핵심 아이디어: %X 형식 지정자
C/C++에는 %X라는 형식 지정자(format specifier)가 있습니다. 이 지정자는 변수의 값을 16진수 형태로 출력해 주며, sprintf() 함수와 함께 사용하면 숫자를 손쉽게 문자열로 변환할 수 있습니다.
입력: 정수 255 출력: FF
알고리즘
1단계: 사용자로부터 숫자를 입력받는다. 2단계: %X 형식 지정자를 사용해 숫자를 16진수 문자열로 변환한다. 3단계: 결과를 출력한다. 4단계: 종료한다.
예제 코드
#include<iostream>
using namespace std;
main() {
int n;
char hex_string[20];
cout << "Enter a number: ";
cin >> n;
sprintf(hex_string, "%X", n); // 숫자를 16진수로 변환
cout << hex_string;
}실행 결과
Enter a number: 250 FA
코드 설명
위 코드의 동작 원리를 단계별로 살펴보면 다음과 같습니다.
1. 변수 선언: 정수형 변수 n과 변환 결과를 저장할 문자 배열 hex_string(크기 20)을 선언합니다.
2. 입력 받기: cin을 통해 사용자로부터 정수를 입력받습니다.
3. 변환: sprintf(hex_string, "%X", n) 함수가 정수 n을 16진수 대문자 형식으로 변환하여 hex_string에 저장합니다. 소문자로 출력하고 싶다면 %x를 사용하면 됩니다.
4. 출력: 변환된 문자열을 화면에 출력합니다.
참고 사항
현대 C++에서는 sprintf() 대신 std::stringstream이나 C++11부터 도입된 std::to_string과 조합, 또는 std::format(C++20)을 사용하는 것이 더 안전하고 권장됩니다. 예를 들어 다음과 같이 작성할 수 있습니다.
#include<iostream>
#include<sstream>
using namespace std;
int main() {
int n = 250;
stringstream ss;
ss << hex << uppercase << n;
string hex_string = ss.str();
cout << hex_string; // FA 출력
}이처럼 %X 형식 지정자를 활용하면 복잡한 나눗셈 연산 없이도 한 줄의 코드로 정수를 16진수 문자열로 간편하게 변환할 수 있습니다.