Я пытаюсь прочитать пользовательские данные из двоичного файла
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <fstream>
struct Data
{
int xs, ys;
double ullat, ullon, lrlat, lrlon;
double minval, maxval;
// and some vector of floats
};
namespace boost {
namespace serialization {
template <class Archive>
void
serialize (Archive& ar, Data& d, const unsigned int version)
{
ar & d.xs & d.ys;
ar & d.ullat & d.ullon & d.lrlat & d.lrlon;
ar & d.minval & d.maxval;
}
} // namespace serialization
} // namespace boost
int main (void)
{
std::ifstream fin ("test.bin", std::ios::in | std::ios::binary);
// the binary file was not created by boost serialization library. No header information
boost::archive::binary_iarchive arc (fin, boost::archive::no_header);
Data d;
arc >> d;
}
После этого d
содержит нежелательные значения (огромные -ve или + ve числа).
ЕслиЯ использую fstream::read
для чтения файла в соответствии с макетом d
Я получаю правильные значения. Я не могу понять, что здесь происходит. Как я прокомментировал в коде, двоичный файл был , а не , созданный библиотекой Boost-сериализации. Следовательно, используя флаг no_header
.
Я проверил двоичный файл с помощью инструмента шестнадцатеричного просмотра (ghex на linux), и fstream::read
возвращает правильные значения. Что может быть не так?
Я использую gcc-8.3 и VS2017 с boost 1.70 и c ++ 17