Écrire ensemble des entiers à std::ofstream et être capable de les lire
J'ai besoin d'ecrire un tas d'entiers non signés de std::ofstream
en mode binaire:
std::ofstream f;
f.open("some path", std::ios::out | std::ios::binary);
//some loop
{
unsigned int k = get_k(); //may product numbers from 0 to 65535
f << k;
}
f.close();
Ils sont écrits dans le fichier de sortie "comme est" w/o un délimiteur. Alors, quand je suis en train de lire (l'espoir d'obtenir ce que j'ai écrit) à l'aide de std::ifstream
je reçois très étrange valeurs. Ce que je fais mal?
Ou je doit mettre ' '
(espace) pour le flux après tout ajout du nombre de les séparer?
Grâce.
Pensez-vous que ios::binary feront de votre sortie de flux des entiers en binaire, au lieu de l'ASCII? (J'ai l'habitude d'avoir cette idée fausse de moi-même.)
OriginalL'auteur bndu | 2010-03-19
Vous devez vous connecter pour publier un commentaire.
Vous utilisez
operator<<()
où les sorties du texte formaté à un ruisseau. Vous avez donc écrit en clair dans un fichier binaire, genre de défaites le but de l'écriture en binaire de mode. Essayez d'ouvrir le fichier de sortie dans un éditeur de texte et de voir par vous-même.Vous avez deux choix: soit écrire en mode texte et définir vos valeurs avec des espaces blancs (parce que l'écriture en binaire de mode est trompeuse lorsque vous utilisez une sortie formatée), ou utiliser le flux de
write()
méthode de coulée.Personnellement, je préfère écrire en mode texte. Cela signifie avoir un nettoyeur de code et un portable fichier de sortie. Si vous devez vous pouvez compresser le fichier.
OriginalL'auteur wilhelmtell
operator<<
produit un texte formaté comme sa sortie, alors oui, vous aurez besoin de mettre une sorte d'espace entre les chiffres pour les séparer. Sinon, ils vont tous courir ensemble dans une immense chaîne de chiffres, et lorsque vous les lire, il va continuer à lire les chiffres dans le cadre d'un nombre jusqu'à ce qu'il déborde -- par exemple, si vous avez écrit1
trois fois, il serait lire de retour en tant que111
.OriginalL'auteur Jerry Coffin