Question

    

Cette question a déjà une réponse ici:

         

J'ai un std :: bitset que je voudrais écrire dans un fichier, bit pour bit, mais bien sûr, la fonction d'écriture de fstream ne supporte pas. Je ne peux pas penser à une autre façon d'ailleurs la conversion de chaque groupe de 8 bits à char en utilisant la chaîne et de l'écriture que ...

Quelqu'un sait d'une bonne façon?

Était-ce utile?

La solution

Essayez:

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

Autres conseils

Eh bien, « une » façon de le faire est d'utiliser la chaîne comme méthode de sérialisation. Il est un constructeur de bitset qui prend un argument de chaîne, et il y a une fonction membre to_string () qui retourne un. Il y a aussi << et >> d'aide que l'utilisation qui utlize le constructeur et la fonction to_string () pour l'insertion et l'extraction flux. Cela peut fonctionner pour vous en fonction de vos besoins.

Ce n'était pas assez compact pour nous dans une application, donc nous avons fini par écrire une classe qui ressemble bitset (a la même interface), mais il est également sérialisable comme un flux d'octets, ce qui signifie qu'il a des fonctions qui renvoient des pointeurs au tableau d'octets sous-jacente qui le rend vers le haut. Il n'a pas été trop terriblement difficile d'écrire si vous avez la source de plusieurs implémentations à regarder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top