二進位輸出檔案
資料流最初是針對文字所設計,因此預設輸出模式是文字。 在文字模式中,換行字元(換行符)會展開成歸位換行字元組。 此擴充可能造成問題,如下所示:
// 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 ) );
}
您可能預期此程式輸出位元組序列 { 99, 0, 10, 0 },但它卻輸出 { 99, 0, 13, 10, 0 },導致預期二進位輸入的程式出現問題。 如果您需要真正的二進位輸出,其中字元是未轉譯的,您可以使用 ofstream 建構函openmode
式自變數來指定二進位輸出:
// 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 );
}