728x90
반응형
0과 1로 이루어진 string(예를들면 "011011011100")을 ofstream binary mode로 그냥 쓰면 bit로 들어가지 않는다. 이 때 bitset STL을 사용하여 bit 단위로 쓸 수 있다.
해결 방법
- string을 8개 단위로 나눈다. (8개로 나누고 남은 string은 뒷부분을 0으로 채워서 8개로 맞춘다.)
- 1에서 8개 단위로 나눠진 string을 각각 bitset에 담는다.
- bitset에 담긴 8개의 bit들을 unsigned long으로 변환한다. (
bits.to_ulong()
) - 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
반응형