私は心からの努力をしていますが、ここでそのバグを見つけることはできません。私はofstreamにベクトルを書いています。ベクトルにはバイナリデータが含まれています。しかし何らかの理由で、空白文字(0x10、0x11、0x12、0x13、0x20)が書き込まれることになっていると、スキップされます。C++、ベクトル<char>をofstreamスキップの空白に書き込む
私はイテレータを使用して試してみました。直接ofstream :: write()を試しました。
ここに私が使用しているコードがあります。私が試した他の方法のいくつかをコメントアウトしました。
void
write_file(const std::string& file,
std::vector<uint8_t>& v)
{
std::ofstream out(file, std::ios::binary | std::ios::ate);
if (!out.is_open())
throw file_error(file, "unable to open");
out.unsetf(std::ios::skipws);
/* ostreambuf_iterator ...
std::ostreambuf_iterator<char> out_i(out);
std::copy(v.begin(), v.end(), out_i);
*/
/* ostream_iterator ...
std::copy(v.begin(), v.end(), std::ostream_iterator<char>(out, ""));
*/
out.write((const char*) &v[0], v.size());
}
EDIT:それを読み取るコード。ここで
void
read_file(const std::string& file,
std::vector<uint8_t>& v)
{
std::ifstream in(file);
v.clear();
if (!in.is_open())
throw file_error(file, "unable to open");
in.unsetf(std::ios::skipws);
std::copy(std::istream_iterator<char>(in), std::istream_iterator<char>(),
std::back_inserter(v));
}
は、例えば、入力された:
30 0 0 0 a 30 0 0 0 7a 70 30 0 0 0 32 73 30 0 0 0 2 71 30 0 0 4 d2
そしてこれは、私はそれを読み戻すときに私が取得しています出力されます:
30 0 0 0 30 0 0 0 7a 70 30 0 0 0 32 73 30 0 0 0 2 71 30 0 0 4 d2
あなたが見ることができるように、0x0Aのがommitedされています表面的には空白のためです。
ご意見をいただければ幸いです。
読んだところのコードを表示します。 –
読み取りコードはどのように見えますか?問題はそこにあるかもしれません... – fbrereto
ベクトルの内容が実際にあなたが書き込む前に期待していることを確認しましたか? (例えば、入力ステップは空白を削除する可能性があります...) –