Udostępnij za pośrednictwem


Binarne pliki wyjściowe

Strumienie zostały pierwotnie zaprojektowane pod kątem tekstu, więc domyślnym trybem wyjściowym jest tekst. W trybie tekstowym znak kanału informacyjnego (nowy wiersz) rozszerza się do pary zestawienia powrotnego karetki. Rozszerzenie może powodować problemy, jak pokazano poniżej:

// 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 ) );
}

Można oczekiwać, że ten program wyświetli sekwencję bajtów { 99, 0, 10, 0 }; Zamiast tego zwraca dane wyjściowe { 99, 0, 13, 10, 0 }, co powoduje problemy z programem oczekującym danych wejściowych binarnych. Jeśli potrzebujesz prawdziwych danych wyjściowych binarnych, w których znaki są zapisywane nieprzetłumaczone, możesz określić dane wyjściowe binarne przy użyciu argumentu konstruktora openmode strumienia:

// 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 );
}

Zobacz też

Strumienie wyjściowe