이번 글에서는 문자열을 이진 코드 안에 숨기는 방법을 알아봅니다. 여기서 말하는 이진 코드는 16진수 형태로 표현된 것입니다.
동작 원리
방법은 매우 간단합니다. C++의 stringstream을 사용하면 10진수를 손쉽게 16진수로 변환할 수 있습니다. 먼저 대상 문자열에서 한 글자씩 읽어 들여 각 문자의 아스키(ASCII) 코드 값을 구한 뒤, 이 값을 16진수로 변환하여 차례대로 출력하면 됩니다.
예제 코드
#include<iostream>
#include<sstream>
using namespace std;
string dec_to_hex(int decimal){ //10진수를 16진수로 변환하는 함수
stringstream my_ss;
my_ss << hex << decimal;
return my_ss.str();
}
main(){
string my_string = "This is a sample text";
for(int i = 0; i<my_string.length(); i++){
cout << dec_to_hex(my_string.at(i)) << " ";
}
}실행 결과
54 68 69 73 20 69 73 20 61 20 73 61 6d 70 6c 65 20 74 65 78 74
출력된 각 16진수 값은 문자열 "This is a sample text"를 구성하는 개별 문자들의 아스키 코드입니다. 예를 들어 첫 번째 값 54(16진수)는 10진수로 84이며, 이는 문자 'T'의 아스키 코드와 정확히 일치합니다. 공백 역시 아스키 값 32(16진수 20)로 변환되어 함께 출력되는 것을 확인할 수 있습니다.