Jin Dev
Jin Dev
Jin Dev
전체 방문자
오늘
어제
  • 분류 전체보기 (7)
    • 공부 (4)
      • Python (1)
      • C++ (1)
      • XE (1)
      • Git (1)
    • 팁 (3)

블로그 메뉴

  • 홈
  • About me

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jin Dev

Jin Dev

공부/C++

0과 1로 이루어진 string을 bit로 파일쓰기

2019. 2. 10. 23:59
728x90
반응형

0과 1로 이루어진 string(예를들면 "011011011100")을 ofstream binary mode로 그냥 쓰면 bit로 들어가지 않는다. 이 때 bitset STL을 사용하여 bit 단위로 쓸 수 있다.

해결 방법

  1. string을 8개 단위로 나눈다. (8개로 나누고 남은 string은 뒷부분을 0으로 채워서 8개로 맞춘다.)
  2. 1에서 8개 단위로 나눠진 string을 각각 bitset에 담는다.
  3. bitset에 담긴 8개의 bit들을 unsigned long으로 변환한다. (bits.to_ulong())
  4. 3에서 구해진 unsigned long에 해당하는 char형(1byte=8bits)을 파일에 쓴다.
#include <bitset>
void writeBin(ofstream& fout, string str) {
    int i = 0;
    for (i = 0; i < str.length(); i += 8) {
        string temp = str.substr(i, 8) + "00000000";
        bitset<sizeof(char) * 8> bits(temp.substr(0, 8));
        unsigned long binary_value = bits.to_ulong();
        fout.write((const char*)&binary_value, sizeof(char));
    }
}

마지막 바이트의 끝 부분에는 불필요한 정보가 들어있을 수 있다. 이 문제는 헤더를 추가하여 읽을 때 불필요한 정보를 걸러주는 방법 등을 사용하면 된다.

728x90
반응형
    Jin Dev
    Jin Dev

    티스토리툴바