Russian Qt Forum

Qt => Вопросы новичков => Тема начата: menand от Январь 31, 2012, 15:13



Название: помогите прочитать бинарный файл
Отправлено: menand от Январь 31, 2012, 15:13
Есть файл.

в начале 8 байт - текста (ascii), затем float64 число, затем int32 число, затем массив float32 длинна которого - в int32 числе (которое только что считали) (ну и т.д., дальше уже по аналогии разберусь).

Собственно вопрос - как отрыть такой файл и читать с него данные? Тоесть может ли кто-нибудь привести пример чтения:

1) 8 байт текста
2) флоат64
3) инт32
4) for(int i=0;i<N;i++) читать флоат32

ЗЫ программа должна быть кросс-платформленной.. тоесть длинну типов надо както явно задавать..


Название: Re: помогите прочитать бинарный файл
Отправлено: kuzulis от Январь 31, 2012, 15:43
Сделай свой класс, по аналогии с QDataStream

Типа:

Код
C++ (Qt)
QFile file("file.dat");
 
file.open(QIODevice::ReadOnly);
MyDataStream in(&file);    
 
in.setAsciiSize(8);
in.setValueDataTypeSize(64); //подразумеваем, что тип данных вещественный
in.setArrayDataTypeSize(32); //подразумеваем, что тип данных вещественный
 
QString str;
double a;
QVector<float> v;
 
in >> str >> a >> v;  
 
//или
in.setAsciiSize(8);
in.setValueDataTypeSize(32); //подразумеваем, что тип данных вещественный
in.setArrayDataTypeSize(64); //подразумеваем, что тип данных вещественный
 
QString str;
floata;
QVector<double> v;
 
in >> str >> a >> v;    
 

Как то так


Название: Re: помогите прочитать бинарный файл
Отправлено: mutineer от Январь 31, 2012, 16:11
Ну или QFile::read()


Название: Re: помогите прочитать бинарный файл
Отправлено: menand от Январь 31, 2012, 16:22
свой класс делать както слишком монструозно..

read () - както не могу понять как он работает.. как запоминает на каком месте остановился и вообще..

можно пример как им пользоваться на приведённом выше формате файлов?


Название: Re: помогите прочитать бинарный файл
Отправлено: mutineer от Январь 31, 2012, 16:24
Гугл тебе сильно поможет - это уж слишком базовые знания