2016-10-20 6 views
-1

ファイルに整数の束を書き込んだり、後でそれらを読み取ることができます。私の問題は、ファイルに整数を書き込むと、より小さい整数は4バイト未満で終了するということです。したがって、例えば1は00 00 00 01ではなく01として表されます。これは、1つの整数の始まりと終わりがわからないため、ファイルの読み込みに問題があることを意味します。ファイルに書き込む整数が常に4バイトになるようにするにはどうすればよいですか?私のコードは以下の通りです:C++ 4バイト長のバイナリファイルに整数を書き込む方法

std::fstream file; 
file.open("test.bin", std::ios::out | std::ios::binary); 
for each(int i in vectorOfInts) { 
    file << i; 
} 
file.close(); 
+0

使用[ 'file.write()'](http://en.cppreference.com/w/cpp/io/basic_ostream/write)します。 –

+1

バイナリファイルへの書き込みにunsigned charsを使用する理由なぜストリーム演算子をバイナリファイルに書き込むべきではないでしょうか?](http://stackoverflow.com/questions/7460206/why-use-unsigned-chars-for-writing-to-binary-files-and-why -shouldnt-stream-ope) –

+0

なぜ "00 00 00 01"と書いておきたいのですか? – RyanP

答えて

3

テキストとバイナリファイルは混同しているようです。テキストファイルには<<演算子が使用されます。値をテキストに変換し、ファイルに書き込みます。ネイティブバイナリ形式の整数をファイルに書き込むには、writeメソッドを使用する必要があります。以下は4バイトをファイルに書き出します。

file.write(reinterpret_cast<const char *>(&i), sizeof(i)); 

また、データを読み込む内容に応じて、データのエンディアンを考慮する必要があります。

ます。また、使用してループせずに全体のベクトルを書くことができます:

file.write(reinterpret_cast<const char *>(&vectorOfInts[0]), vectorOfInts.size()*sizeof(int)); 
+0

ああ、私は今すぐライトを見る –

関連する問題