2016-04-30 7 views
0

std::vectorの長さがNで、long, string, doubleのタイプがいくつかあります。私は簡単にLinuxの中で読むことができ、それがバイナリに書き込まれますios::binary flagを使用していないもののofstreamを使用すると、ios :: binaryフラグなしでバイナリを書き込むC++

int N = 100; 
std::vector<std::string> var1String(N), var2String(N), var3String(N), var4String(N); 
std::vector<long> var1Long(N); 
std::vector<double> var1Double(N); 

... 

std::ofstream f(path2file); 
     for(int i=0; i<N; i++) 
    { 
f << var1String[i] << " " << var2String[i] << " " << var1Long[i] << " " << var3String[i] << " " << var1Double[i] << " " << var4String[i] << std::endl; 
} 

:私は、プレーンテキストファイルには、この方法でそれを記述しようとしています。しかし、私はそれを平易なASCIIテキストファイルに書きたい。 (注:var1Long[i]var1Double[i]を文字列に変換してみましたが、違いはありません)。私は間違って何をしていますか?

EDIT:サーバーからの出力をASCII形式のベクトルに変換する、より大きなプログラムの一部です。私が言ったように、Linuxでバイナリを読んだり、std::coutを代わりに使ってプログラムを実行すると、fはうまく印刷されます。私はストリームがバイナリとして渡される原因を理解していません。

+2

出力例を投稿できますか? (16進、ASCII) – LogicStuff

+1

これは再現できません、これはテキストファイルを作成するだけですか? - 問題を再現するために実際のコードを投稿してください。これはコンパイルされません(varLong1は宣言されていません) – stijn

答えて

2

ios::binaryあなたはどう思いますか? «What's the difference between opening a file with ios::binary or ios::out or both?»でexplained by Nick Bedfordよう

ios::binaryは、必ずデータをその場での\ r \ nにしてから改行文字を変換せずに読み取りまたは書き込みされます。言い換えれば、まさにストリームを与えるものは、まさに書かれたものです。

それはがバイナリコンテンツ用のファイルをマークしていない、それだけで彼らのテキスト表現にC新しい行を翻訳から保持します。その不在はではありません。ではファイルにバイナリデータが含まれていません。

短い:「文字列」変数にバイナリデータが含まれているため、ファイルにバイナリデータがあります。

関連する問題