나는 진지한 노력에도 불구하고 여기에 버그를 찾을 수 없습니다. 나는 ofstream에 벡터를 쓰고있다. 벡터에 바이너리 데이터가 포함되어 있습니다. 그러나 어떤 이유로 공백 문자 (0x10, 0x11, 0x12, 0x13, 0x20)가 기록 될 것으로 예상되는 경우 건너 뜁니다.C++, 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());
}
편집 : 코드를 다시 읽으십시오. 여기
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
벡터의 내용이 실제로 쓰기 전에 예상했던 내용인지 확인 했습니까? (예 : 입력 단계가 공백을 제거 할 수 있습니다 ...) –