crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Чтение двоичных файлов
ViGOur
  опции профиля:
сообщение 9.7.2008, 13:17
Сообщение #11


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Приведи оператор operator<<.

Сообщение отредактировал ViGOur - 9.7.2008, 13:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.7.2008, 13:22
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ViGOur @ 9.7.2008, 14:17) *
Приведи оператор operator<<.

Не понял. Зачем? Мне ее не надо писать, ее надо только прочесть. Или надо тут привести код оператора operator>>?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.7.2008, 13:42
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


а кто пишет эту структуру?
как я понял не ты, правильно?

если ты читаешь настоящий nt.dat, то QDataStream тебе не подойдет для чтения, прийдется читать с помощью read и write.
что в принципе удобней. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.7.2008, 14:13
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ViGOur @ 9.7.2008, 14:42) *
а кто пишет эту структуру?
как я понял не ты, правильно?

если ты читаешь настоящий nt.dat, то QDataStream тебе не подойдет для чтения, прийдется читать с помощью read и write.
что в принципе удобней. :)

Скажем так, файлы nt.mac (nt.dat - был тестовый) пишутся другой программой, которую делал я (программа написана на GUI MFC). Там это реализовано с помощью WinApi - ReadFile, WriteFile!
А как правильно прочесть с помощь read()? Можно примерчик куска кода?

Сообщение отредактировал AD - 9.7.2008, 14:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.7.2008, 14:16
Сообщение #15


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А как ты читаешь на MFC? :)

read и write работаю на подобии ReadFile и WriteFile. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.7.2008, 14:40
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ViGOur @ 9.7.2008, 15:16) *
А как ты читаешь на MFC? :)

read и write работаю на подобии ReadFile и WriteFile. ;)

QDataStream, говоришь, для этого не подойдет. А что использовать? QIODevice или QFile?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.7.2008, 14:45
Сообщение #17


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Цитата(AD @ 9.7.2008, 15:40) *
А что использовать? QIODevice или QFile?
QFile
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.7.2008, 14:58
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(ViGOur @ 9.7.2008, 15:45) *
QFile

Вопрос уточню:
в ReadFile, WriteFile - есть параметры типа void*, которые можно привести к моим (пользовательским) типам.
В Qt описание read следующее:
Цитата
qint64 read ( char * data, qint64 maxSize )
Reads at most maxSize bytes from the device into data, and returns the number of bytes read. If an error occurs, such as when attempting to read from a device opened in WriteOnly mode, this function returns -1.
0 is returned when no more data is available for reading.
See also readData(), readLine(), and write().

QByteArray read ( qint64 maxSize )
This is an overloaded member function, provided for convenience.
Reads at most maxSize bytes from the device, and returns the data read as a QByteArray.
This function has no way of reporting errors; returning an empty QByteArray() can mean either that no data was currently available for reading, or that an error occurred.

Каким образом я смогу эти типы привести к нужному мне типу? А мне нужен тип MAC4Header. Выше уже приводилась его структура.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.7.2008, 15:18
Сообщение #19


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Вот так:
    _str strIn;
    QFile f1("nt.dat");
    f1.open(QIODevice::WriteOnly);
    f1.write( (const char *)&strIn, sizeof( strIn));
    f1.close();

    _str strOut;
    strOut.n = .0123;
    strOut.s = "test";
    strOut.y = 1;

    QFile f2("nt.dat");
    f2.open(QIODevice::ReadOnly);
    f2.read( (char *)&strOut, sizeof( strOut));
    f2.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 9.7.2008, 15:19
Сообщение #20


Программист-самоучка
***

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

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




Репутация:   3  


может проще для таких структур данных использовать XML? тем более в Qt есть и SAX-парсеры, и DOM-парсеры...

Сообщение отредактировал void* - 9.7.2008, 15:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 29.3.2024, 11:39