Fichiers de sortie binaires
Les flux de données ont été initialement conçus pour le texte, afin que le mode de sortie par défaut soit du texte. En mode texte, le caractère de saut de ligne (hexadécimal 10) s'étend à un retour chariot CRLF (16 bits uniquement). L'expansion peut entraîner des problèmes, comme montré ici :
// binary_output_files.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };
int main( )
{
ofstream os( "test.dat" );
os.write( (char *) iarray, sizeof( iarray ) );
}
Vous pouvez vous attendre à ce que programme renvoie la séquence byte {99, 0, 10, 0} ; mais il renvoie {99, 0, 13, 10, 0} à la place, ce qui pose problèmes pour un programme à entrées binaires. Si vous avez besoin de vrais résultat binaire, dans laquelle les caractères sont écrits non traduits, vous pouvez spécifier le résultat binaire avec l'argument du mode de construction ofstream:
// binary_output_files2.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
int iarray[2] = { 99, 10 };
int main()
{
ofstream ofs ( "test.dat", ios_base::binary );
// Exactly 8 bytes written
ofs.write( (char*)&iarray[0], sizeof(int)*2 );
}