Boost logo

Boost Users :

From: Stephane Martineau (stephane.martineau_at_[hidden])
Date: 2005-08-03 04:54:48


ok that's cool ;)

Now it works, thanks a lot .

  ----- Original Message -----
  From: Robert Ramey
  To: boost-users_at_[hidden]
  Sent: Wednesday, August 03, 2005 6:25 AM
  Subject: Re: [Boost-users] problem with float or double serializationwithbinary archive VC 7.1 boost1.32 and 1.33

  I believe that code like the following:

   std::ofstream ofs("val.bin");
   boost::archive::binary_oarchive oa(ofs,std::ios::binary);
   oa<< f ;

  should be changed to:

   std::ofstream ofs("val.bin", std::ios::binary);
   boost::archive::binary_oarchive oa(ofs);
   oa<< f ;

  Robert Ramey
    "Stephane Martineau" <stephane.martineau_at_[hidden]> wrote in message news:002b01c5973f$ec8fad60$234c8189_at_ICDI6...
    Hye,

    this little program fail in serialization of a float with binary archive but success with xml or text archive ??

    as i am not an expert, i have now idea why ???
     i have the save problem with double and like with float, only depending of the value ....

    it fails under windows XP, VC++7.1 but success under Linux + gcc

    thanks for helping ,
    Stéphane.

    // problemeserialisation.cpp
    //

    #include <iostream>
    #include <fstream>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/archive/binary_oarchive.hpp>
    #include <boost/archive/binary_iarchive.hpp>
    #include <boost/archive/xml_oarchive.hpp>
    #include <boost/archive/xml_iarchive.hpp>

    void test_binary (float & f)
    {
     using namespace std ;
     std::ofstream ofs("val.bin");
     boost::archive::binary_oarchive oa(ofs,std::ios::binary);
     oa<< f ;
     ofs.close();
     std::cout << "Valeur serialisee binary " << f << std::endl ;
     std::ifstream ifs("val.bin");
     boost::archive::binary_iarchive ia(ifs,std::ios::binary);
     float f1;
     ia >> f1;
     
    if (ifs.fail())
     {
      cout << "badbit " << ( ifs.rdstate( ) & ios::badbit ) << endl;
      cout << "failbit " << ( ifs.rdstate( ) & ios::failbit ) << endl;
      cout << "eofbit " << ( ifs.rdstate( ) & ios::eofbit ) << endl;
     }

     std::cout << "Valeur deserialisee binary "<< f1 << std::endl ;
        ifs.close();
     return ;
    }

    void test_text (float & f)
    {
     std::ofstream ofs("val.txt");
        boost::archive::text_oarchive oa(ofs);
     oa << f ;
     ofs.close();
     std::cout << "Valeur serialisee Texte " << f << std::endl ;
     std::ifstream ifs("val.txt");
     boost::archive::text_iarchive ia(ifs);
     float f2 ;
     ia >> f2;
     std::cout << "Valeur deserialisee Texte "<< f2 << std::endl ;
        ifs.close();
     return ;
    }

    void test_xml (float & f)
    {
     std::ofstream ofs("val.xml");
        boost::archive::xml_oarchive oa(ofs);
     oa << BOOST_SERIALIZATION_NVP(f) ;
     ofs.close();
     std::cout << "Valeur serialisee Xml " << f << std::endl ;
     std::ifstream ifs("val.xml");
     boost::archive::xml_iarchive ia(ifs);
     float f2 ;
     ia >> BOOST_SERIALIZATION_NVP(f2);
     std::cout << "Valeur deserialisee Xml "<< f2 << std::endl ;
        ifs.close();
     return ;
    }

    int main (int argc, const char * argv[])
    {
     float f1 = (float)2.411667 ;
     test_text(f1);
     test_xml(f1);
     test_binary(f1);
     return 0;
    }

    output :

    Valeur serialisee Texte 2.41167
    Valeur deserialisee Texte 2.41167
    Valeur serialisee Xml 2.41167
    Valeur deserialisee Xml 2.41167
    Valeur serialisee binary 2.41167
    badbit 0
    failbit 2
    eofbit 1
    Valeur deserialisee binary -1.07137e+008

----------------------------------------------------------------------------

    _______________________________________________
    Boost-users mailing list
    Boost-users_at_[hidden]
    http://lists.boost.org/mailman/listinfo.cgi/boost-users

------------------------------------------------------------------------------

  _______________________________________________
  Boost-users mailing list
  Boost-users_at_[hidden]
  http://lists.boost.org/mailman/listinfo.cgi/boost-users



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net