Pergunta

Esta questão já tem uma resposta aqui:

Eu tenho um std :: bitset que eu gostaria de escrever para um arquivo, bit por bit, mas é claro que a função de gravação de fstream não suporta isso. Eu não posso pensar de outra maneira além de converter cada grupo de 8 bits para um char usando cordas e escrever isso ...

Alguém sabe de uma boa maneira?

Foi útil?

Solução

Tente:

#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;
}

Outras dicas

Bem, "a" maneira de fazer isso é usar string como seu método de serialização. Há um construtor bitset que leva um argumento de cadeia, e há uma () função membro to_string que retorna um. Há também << >> e operadores auxiliares que o uso que utlize o construtor e função to_string () para a inserção e extracção de fluxo. Isso pode funcionar para você, dependendo de suas necessidades.

Isso não foi compacto o suficiente para nós em um aplicativo, então acabamos escrevendo uma classe que se parece com bitset (tem a mesma interface), mas também é serializado como um fluxo de bytes, o que significa que tem funções que ponteiros de retorno para a matriz de bytes subjacente que torna-se. Não foi terrivelmente difícil escrever se você tiver a fonte para várias implementações de se olhar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top