Помогите пожалуйста, я немного запутался.
Вот структура, которую я пытаюсь считать из файла
struct MAC4Header
{
enum {
SIGN_SIZE = 16,
LIB_IDENT_SIZE = 256 - SIGN_SIZE - 2 * sizeof(int) };
enum {
CUR_VERSION_MAJOR = 1,
CUR_VERSION_MINOR = 0,
};
char Signature[ SIGN_SIZE ];
char LibraryIdent[ LIB_IDENT_SIZE ];
int VersionMajor;
int VersionMinor;
float Latb;
float Late;
float Lonb;
float Lone;
unsigned int Year;
unsigned int Month;
unsigned int Day;
unsigned int Hour;
unsigned int Min;
unsigned int Sec;
unsigned int Milliseconds;
unsigned long Crc32;
unsigned int ChartNumber;
unsigned int SumSize;
};
Вот так я переопределил оператор
operator>>QDataStream& operator>>(QDataStream& in, MAC4Header& lib_head)
{
QString libIdent;
int _crc = 0;
in >> libIdent;
string libIdentificator = libIdent.toStdString();
strcpy(lib_head.LibraryIdent, libIdentificator.c_str());
in >> lib_head.VersionMajor >> lib_head.VersionMinor >> lib_head.Latb >> lib_head.Late >> lib_head.Lonb;
in >> lib_head.Lone >> lib_head.Year >> lib_head.Month >> lib_head.Day >> lib_head.Hour >> lib_head.Min;
in >> lib_head.Sec >> lib_head.Milliseconds >> lib_head.ChartNumber >> lib_head.SumSize >> _crc;
lib_head.Crc32 = _crc;
return in;
}
Вот само считывание
bool LibReader::TRead()
{
bool ret = false;
if(!open()) return ret;
QDataStream in(file);
int v = in.version();
QVector<MAC4Header> libVec(1, MAC4Header());
int size = libVec.size();
in >> libVec;
//libHeader = vecLib.front();
/*QVector<MAC4Header*> libHeader(1);
QVector<MAC4ChartHeader*> chartHeader;
in >> libHeader;*/
shutdown();
return ret;
}
Ну и на всякий случай привожу код LibReader:
/// Класс для чтения библиотек карт
class LibReader
{
private:
QFile* file; ///< файл для чтения библиотек карт
public:
LibReader(const QString fileName): file(new QFile(fileName)) {}
~LibReader() { delete file; }
bool open() { if(isOpen()) shutdown(); file -> open(QIODevice::ReadOnly); return isOpen(); }
bool isOpen() { return file -> isOpen(); }
void setFilename(const QString fileName) { if(isOpen()) shutdown(); file -> setFileName(fileName); }
void shutdown() { file -> close(); }
bool exists() const { return file -> exists(); }
bool TRead();
bool loadCharts();
};
А вопрос вот в чем. Он при чтении вектора выдает бешеный размер и в итоге крутится внутри этого цикла (залез дебаггером и посмотрел)!
Как считать все-таки правильно?