2016-08-12 4 views
0

バイナリファイルを書き込むために、以下のコードをC++で作成しました。ファイルを出力しますが、ファイルを開くと出力されます。私はそれがASCII形式だと思う。私は間違って何をしていますか?文字列メッセージをファイルにバイナリとして保存するにはどうすればよいですか?バイナリのC++エラーを書き込みます。

#include <iostream> 
#include <fstream> 
#include <stdlib.h> 
#include <string> 

using std::ios; 

void writeFile(const std::string &fileName, const std::string data) 
{ 
    std::ofstream ofs; 
    ofs.open(fileName.c_str(), ios::out | ios::binary); 
    if (ofs.is_open()) 
    { 
     ofs.write(data.c_str(),data.size()); 
     ofs.close(); 
    } 
    else 
    { 
     std::cerr <<"Error while writing File: "<<fileName<<std::endl; 
     exit (EXIT_FAILURE); 
    } 
} 

int main(int argc, char const *argv[]) 
{ 
    /* code */ 
    std::string message = "This should be binary"; 
    writeFile("sample", message);  


    return 0; 
} 

答えて

1

文字列がASCIIテキストで、バイナリモードで開いている場合、ファイルはASCIIテキストで埋められます。 ASCIIは文字とバイトの間に1-1の対応があるため、内容をASCIIとして解釈するテキストエディタではテキストとして表示されます。

バイナリモードは、通常、行末変換を無効にするWindows上でのみ重要です。 Windowsのテキストモードでは、文字列の\nは出力時に\r\nにシームレスに変換され、一致するWindows規則には\r\n\nに変換されます。バイナリモードは変換を無効にしますが、それ以外の場合は何も変更しません。

Windows上でこれを確認したい場合は、(それが唯一の行末のため\r\nを主張している「ダム」編集者)notepad.exeで開き、バイナリモードでファイルに"Foo\nBar"のような文字列を書き込みます。両方の単語が1行に表示されます。同じ文字列をテキストモードでファイルに書き込むと、それらは異なる行に表示されます。

+0

バイナリファイルにASCII文字列を書き込む方法を知っていますか?それはまた、読みながら文字列に再変換する必要がありますか? – itsnevertoobadtoaskforhelp

+1

@itsnevertoobadtoaskforhelp:あなたはすでにそれを行っています。文字列のリテラルバイトはファイルに格納されます。ポイントは、リテラルバイトはASCIIテキストであるため、テキストのように見えます。 ShadowRangerの答えを再読み込みします。 –

関連する問題