Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열을 이진 시퀀스로 변환하는 방법

문자열을 이진 시퀀스로 변환하기

이 튜토리얼에서는 C++을 사용하여 문자열을 이진(Binary) 시퀀스로 변환하는 프로그램을 다룹니다.

예를 들어 "tutorialspoint"라는 문자열이 주어지면, 각 문자를 ASCII 값에 대응하는 이진수로 변환한 뒤, 문자 단위로 공백을 두어 출력하는 것이 목표입니다.

알고리즘 동작 방식

변환 과정은 다음과 같은 단계로 진행됩니다.

  1. 문자열의 각 문자를 순회하며 int() 캐스팅을 통해 ASCII 정수 값을 얻습니다.
  2. 해당 값을 2로 나누는 과정을 반복하면서 나머지(0 또는 1)를 문자열에 하나씩 추가합니다.
  3. 나눗셈 연산 특성상 비트가 낮은 자릿수부터 저장되므로, reverse() 함수로 순서를 뒤집어 올바른 이진수를 만듭니다.
  4. 완성된 이진수를 공백과 함께 출력합니다.

예제 코드

#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을 사용하는 방식은 코드를 간결하고 안정적으로 만들어 줍니다. 상황에 맞게 두 가지 방법을 선택해 활용해 보시기 바랍니다.