crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> помогите прочитать бинарный файл
menand
  опции профиля:
сообщение 31.1.2012, 15:28
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 31.1.2012
Пользователь №: 3171

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть файл.

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

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

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

ЗЫ программа должна быть кросс-платформленной.. тоесть длинну типов надо както явно задавать..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
sidsukana
  опции профиля:
сообщение 31.1.2012, 16:31
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


А в 8 байтах текста, он как текст? Т.е заканчивается на \0 ?

Если так попробовать?

QFile m_file("file.dat");
        
if (!m_file.open(QIODevice::ReadOnly))
    return;

QDataStream stream(&m_file);
stream.setByteOrder(QDataStream::LittleEndian);
stream.setFloatingPointPrecision(QDataStream::SinglePrecision);

QString str;
double d;
qint32 length;

quint8 c;
for (int i = 0; i < 8; i++)
{
    stream >> c;
    str.append(char(c));
}

stream >> d;
stream >> length;

float* data = new float[length];

for (int i = 0, i < length; i++)
    stream >> data[i];



Цитата(menand @ 31.1.2012, 19:20) *
не пашет.. цикл не нравиться первый же..

ЗЫ а как оно запоминает где он в данный момент читает?. там никакое смещение указывать не надо?

Нет там девайс в нашем случае файл, обновляет позицию, а стрим ее считывает и запоминает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 20:02