crossplatform.ru

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


  Ответ в Чтение двоичных файлов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 9.7.2008, 15:35
 
Цитата(void* @ 9.7.2008, 16:19) *
может проще для таких структур данных использовать XML? тем более в Qt есть и SAX-парсеры, и DOM-парсеры...

А как именно хранить их в XML? Сам вариант решения, возможно, интересен, но мне не подойдет. Двоичный файл, который я хочу прочитать, является картографической библиотекой, которую умеют обрабатывать все наши приборы. Мне необходимо научиться читать его в таком виде.

VigOur, спасибо! Сейчас попробую! :)

P.S. Проблема решена!
void* Дата 9.7.2008, 15:19
  может проще для таких структур данных использовать XML? тем более в Qt есть и SAX-парсеры, и DOM-парсеры...
ViGOur Дата 9.7.2008, 15:18
  Вот так:
    _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();
AD Дата 9.7.2008, 14:58
 
Цитата(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, 14:45
 
Цитата(AD @ 9.7.2008, 15:40) *
А что использовать? QIODevice или QFile?
QFile
AD Дата 9.7.2008, 14:40
 
Цитата(ViGOur @ 9.7.2008, 15:16) *
А как ты читаешь на MFC? :)

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

QDataStream, говоришь, для этого не подойдет. А что использовать? QIODevice или QFile?
ViGOur Дата 9.7.2008, 14:16
  А как ты читаешь на MFC? :)

read и write работаю на подобии ReadFile и WriteFile. ;)
AD Дата 9.7.2008, 14:13
 
Цитата(ViGOur @ 9.7.2008, 14:42) *
а кто пишет эту структуру?
как я понял не ты, правильно?

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

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

если ты читаешь настоящий nt.dat, то QDataStream тебе не подойдет для чтения, прийдется читать с помощью read и write.
что в принципе удобней. :)
AD Дата 9.7.2008, 13:22
 
Цитата(ViGOur @ 9.7.2008, 14:17) *
Приведи оператор operator<<.

Не понял. Зачем? Мне ее не надо писать, ее надо только прочесть. Или надо тут привести код оператора operator>>?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 26.11.2022, 22:02