Binäre Ausgabedateien
Streams wurden ursprünglich für Text vorgesehen, sodass der Standardausgabemodus Text. Im Textmodus das Zeilenumbruchzeichen (hexadezimal 10) bis zu einem Wagenrücklauf/Zeilenvorschub (nur Bits). Die Erweiterung kann Probleme verursachen, wie hier gezeigt:
// 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 ) );
}
Sie erwarten dieses Programm, um der Bytesequenz {99, 0, 10, 0} auszugeben; stattdessen gibt sie {99, 0, 13, 10, 0} aus, die Probleme für ein Programm verursacht, das Binärdateieingabe erwartet. Wenn Sie eine echte eine binäre Ausgabe benötigen, in der Zeichen unübersetzt geschrieben werden, können Sie der Binärdatei angeben, die mithilfe des ofstream-Konstruktormodusarguments ausgegeben wurde:
// 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 );
}