2016-12-22 6 views
-1

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 
+0

本当にありますか?あなたはエホフや何かをチェックしていません。 – SingerOfTheFall

+1

フォーマットされたテキスト抽出を使用してバイナリデータを読み取ることはできません。 –

答えて

0

私の仮定は、ブール値として読み出し専用の1ビットがあるので、何のフォーマットが存在しないということです。

これはあなたの問題がある場所です。 stream >> bool_varと入力します( "true"または "false"の文字を探しています)。フォーマットされていない入力を行う場合は、stream.read()またはstream.get()を使用する必要があります。

ios_base::openmode::binaryを使用する唯一のものは、行末文字の処理方法を変更することです。

+0

ありがとう、それは今固定されていませんでした。 – boojum

関連する問題