2009-04-22 3 views
2

나는 파일에 비트를 쓰고 싶지만, 물론 fstream의 쓰기 함수는 이것을 지원하지 않는다 : std :: bitset을 가지고있다. 문자열을 사용하여 글자로 각 8 비트 그룹을 변환하는 것 외에 다른 방법을 생각할 수 없다 ...비트 셋 데이터를 파일에 쓰는 방법은 무엇입니까?

누구나 좋은 방법을 알고 계십니까?

+0

불행한 일이지만, 이런 종류의 구현은 사용하기에 매우 좋았을 것입니다. – jokoon

답변

2

시도 :

#include <bitset> 
#include <fstream> 

int main() { 
    using namespace std; 
    const bitset<12> x(2730ul); 
    cout << "x =  " << x << endl; 

    ofstream ofs("C:\\test.txt"); // write as txt 
    if (ofs) { 
     // easy way, use the stream insertion operator 
     ofs << x << endl; 

     // using fstream::write() 
     string s = x.to_string(); 
     ofs.write(s.c_str(), s.length()); 
    } 
    return 0; 
} 
+0

'마스크'는 무엇인가요? 왜 const 비트셋을 만들고 같은 이름을 가진 또 다른 비트셋을 만드나요? –

+0

내 대답이 업데이트되었습니다.보세요. 그것들은 SGI의 비트셋 예제를 빠르게 편집하여 얻은 결과물입니다. – dirkgently

+0

좋습니다. ofstream 연산자 <<와 같지만 fstream.write() ...는 작동하지 않습니다. –

0

음, 그 일의 "A"방법은 직렬화 방법으로 문자열을 사용하는 것입니다. 문자열 인수를 취하는 비트 생성자가 있으며,이를 반환하는 to_string() 멤버 함수가 있습니다. < <도 있고 >> 생성자를 utlize하고 스트림 삽입 및 추출을 위해 to_string() 함수를 사용하는 >> 도우미 연산자가 있습니다. 그것은 귀하의 요구 사항에 따라 당신을 위해 작동 할 수 있습니다.

한 응용 프로그램에서 우리에게 충분히 압축되지 않았으므로 bitset (인터페이스가 같음)과 비슷한 클래스를 작성했지만 바이트 스트림으로 직렬화 할 수도 있습니다. 즉, 반환하는 함수가 있음을 의미합니다. 그것을 구성하는 기본 바이트 배열에 대한 포인터. 몇 가지 구현을 볼 소스가 있다면 작성하기가 너무 어렵지 않습니다.

관련 문제