2009-04-22 6 views
2

J'ai un fichier std :: bitset que je voudrais écrire dans un fichier, bit par bit, mais bien sûr, la fonction d'écriture de fstream ne le supporte pas. Je ne peux pas penser à une autre manière en plus de convertir chaque groupe de 8 bits en un caractère en utilisant la chaîne et l'écriture que ...Comment écrire des données de bitset dans un fichier?

Quelqu'un sait-il un bon moyen?

+0

c'est dommage, ce genre de mise en œuvre aurait été plutôt agréable à utiliser ... – jokoon

Répondre

2

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; 
} 
+0

pas sûr de comprendre ... qu'est-ce que 'mask'? Pourquoi créez-vous un bit de const, puis un autre avec le même nom? –

+0

Mis à jour ma réponse, jetez un oeil! Ce sont des artefacts issus d'éditions rapides de l'exemple de bitset de SGI. – dirkgently

+0

Très bien. Fonctionne avec l'opérateur ofstream << mais pas fstream.write() ... vérifier. –

0

Eh bien, « une » façon de le faire est d'utiliser la chaîne comme méthode de sérialisation. Il y a un constructeur de bitset qui prend un argument de chaîne, et il y a une fonction membre to_string() qui en retourne une. Il existe également des opérateurs < < et des opérateurs >> helper qui utilisent utlize le constructeur et to_string() pour l'insertion et l'extraction de 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 à un bitet (a la même interface) mais elle est aussi sérialisable comme un flux d'octets, ce qui signifie qu'elle a des fonctions qui retournent pointeurs vers le tableau d'octets sous-jacent qui le compose. Il n'était pas trop difficile à écrire si vous avez la source de plusieurs implémentations à regarder.

Questions connexes