C++(ビジュアルスタジオ2015/windows)のバイナリファイルからブール値を読み取る際に問題が発生しました。ブール値を読み取ろうとする前に、istreamは良いですが、読み込み後、フェイルビットが設定され、ストリームがeofでなく、badbitも設定されていません。C++バイナリファイルとフェイルビットからブール値を読み取る
フェイルビットについてのドキュメント: "bad()と同じケースでtrueを返しますが、整数を読み込もうとするとアルファベットの文字が抽出されるようなフォーマットエラーが発生した場合でもtrueを返します数。"
基本的には、ストリームが良ければeofの後でなくても、バイナリストリームからのブール値の読み取りが失敗することはありません。私の前提は、ブール値として読み取られるビットは1つだけなので、書式はありません。おそらくフェイルビットが設定されている他の条件がありますか?
void Parser::binary2Record(std::istream& in) {
bool is_next_booking;
in >> current_record_;
in >> is_next_booking;
Segment segment;
while (!is_next_booking && in) {
in >> segment;
current_record_.addSegment(segment);
std::cout << "State of io before reading boolean " << (in.good() ? "Good" : "Not good") << std::endl;
in >> is_next_booking;
std::cout << "State of io good after reading boolean " << (in.good() ? "Good" : "Not good") << std::endl;
std::cout << "State of io fail after reading boolean " << (in.fail() ? "fail" : "Not fail") << std::endl;
std::cout << "State of io bad after reading boolean " << (in.bad() ? "Bad" : "Not Bad") << std::endl;
std::cout << "State of io eof after reading boolean " << (in.eof() ? "Eof" : "Not eof") << std::endl;
}
}
Output:
State of io before reading boolean Good
State of io good after reading boolean Not good
State of io fail after reading boolean fail
State of io bad after reading boolean Not Bad
State of io eof after reading boolean Not eof
本当にありますか?あなたはエホフや何かをチェックしていません。 – SingerOfTheFall
フォーマットされたテキスト抽出を使用してバイナリデータを読み取ることはできません。 –