문자열을 이진 시퀀스로 변환하기
이 튜토리얼에서는 C++을 사용하여 문자열을 이진(Binary) 시퀀스로 변환하는 프로그램을 다룹니다.
예를 들어 "tutorialspoint"라는 문자열이 주어지면, 각 문자를 ASCII 값에 대응하는 이진수로 변환한 뒤, 문자 단위로 공백을 두어 출력하는 것이 목표입니다.
알고리즘 동작 방식
변환 과정은 다음과 같은 단계로 진행됩니다.
- 문자열의 각 문자를 순회하며
int()캐스팅을 통해 ASCII 정수 값을 얻습니다. - 해당 값을 2로 나누는 과정을 반복하면서 나머지(0 또는 1)를 문자열에 하나씩 추가합니다.
- 나눗셈 연산 특성상 비트가 낮은 자릿수부터 저장되므로,
reverse()함수로 순서를 뒤집어 올바른 이진수를 만듭니다. - 완성된 이진수를 공백과 함께 출력합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 문자열을 이진수로 변환하는 함수
void convert_binary(string s){
int n = s.length();
for (int i = 0; i <= n; i++){
// ASCII 값으로 변환
int val = int(s[i]);
// ASCII 값을 이진수로 변환
string bin = "";
while (val > 0){
(val % 2) ? bin.push_back('1') : bin.push_back('0');
val /= 2;
}
reverse(bin.begin(), bin.end());
cout << bin << " ";
}
}
int main(){
string s = "tutorialspoint";
convert_binary(s);
return 0;
}실행 결과
1110100 1110101 1110100 1101111 1110010 1101001 1100001 1101100 1110011 1110000 1101111 1101001 1101110 1110100
출력 결과를 보면 첫 번째 문자 't'가 1110100(ASCII 116), 두 번째 문자 'u'가 1110101(ASCII 117)로 변환된 것을 확인할 수 있습니다.
더 간결한 방법: bitset 활용
C++에서는 <bitset> 헤더를 사용하면 위 과정을 한 줄로 처리할 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
void convert_binary(string s){
for (char c : s){
cout << bitset<8>(c) << " ";
}
}
int main(){
string s = "tutorialspoint";
convert_binary(s);
return 0;
}bitset<8>은 항상 8비트 고정 길이로 출력되기 때문에, 선행 0까지 포함된 균일한 형식의 이진 시퀀스가 필요할 때 특히 유용합니다.
마무리
이처럼 각 문자의 ASCII 값을 활용하면 별도의 외부 라이브러리 없이도 문자열을 이진 시퀀스로 손쉽게 변환할 수 있습니다. 직접 나눗셈을 반복하는 방식은 변환 원리를 이해하는 데 도움이 되고, bitset을 사용하는 방식은 코드를 간결하고 안정적으로 만들어 줍니다. 상황에 맞게 두 가지 방법을 선택해 활용해 보시기 바랍니다.