이 글에서는 C++의 stringstream을 활용하여 10진수를 16진수 문자열로 변환하는 방법과, 반대로 16진수 문자열을 10진수로 변환하는 방법을 예제 코드와 함께 살펴봅니다.
stringstream과 hex 조작자란?
stringstream은 문자열 포맷팅, 파싱, 그리고 문자열을 숫자 값으로 변환하는 등 다양한 작업에 활용되는 C++의 강력한 기능입니다. hex는 입출력(IO) 조작자(manipulator)로, 입출력 스트림에 대한 참조를 매개변수로 받아 스트림을 조작한 후 조작된 스트림의 참조를 다시 반환합니다.
그럼 먼저 10진수를 16진수로 변환하는 예제부터 확인해 보겠습니다.
예제 코드: 10진수 → 16진수
#include<iostream>
#include<sstream>
using namespace std;
int main(){
int decimal = 61;
stringstream my_ss;
my_ss << hex << decimal;
string res = my_ss.str();
cout << "61의 16진수 값: " << res;
return 0;
}출력 결과
61의 16진수 값: 3d
위 예제에서는 삽입 연산자 <<를 사용해 정수 값 61을 stringstream에 넣기 전에 hex 조작자로 16진수 형태로 변환했습니다. 이후 str() 함수를 호출하여 스트림의 내용을 문자열로 얻어냈습니다.
이번에는 반대 과정, 즉 16진수 문자열을 10진수로 변환하는 방법을 알아보겠습니다. 16진수 문자열을 stringstream에 넣은 뒤, 추출 연산자 >>를 사용하여 스트림의 내용을 정수형 변수에 저장합니다.
예제 코드: 16진수 → 10진수
#include<iostream>
#include<sstream>
using namespace std;
int main() {
string hex_str = "0x3d"; // 0x 접두사는 붙여도 되고 생략해도 됩니다.
unsigned int decimal;
stringstream my_ss;
my_ss << hex << hex_str;
my_ss >> decimal;
cout << "0x3d의 10진수 값: " << decimal;
return 0;
}출력 결과
0x3d의 10진수 값: 61
이처럼 stringstream과 hex 조작자만 있으면 별도의 외부 라이브러리 없이도 10진수와 16진수 간의 변환을 손쉽게 처리할 수 있습니다. 특히 0x 접두사가 있는 문자열도 자동으로 인식하므로, 실무에서 진법 변환 로직을 구현할 때 매우 유용하게 활용할 수 있습니다.