Russian Qt Forum
Ноябрь 24, 2024, 21:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись произвольных двоичных файлов  (Прочитано 5329 раз)
burunduk
Гость
« : Декабрь 12, 2007, 02:01 »

Нужно записать двоичный файл подобного формата:

Поле1 LONG
Поле2 DWORD
Поле3 BYTE[4]

Вроде просто дальше некуда, но вот как средствами Qt сделать я не знаю...   Или нужно сходить на свежий воздух  Непонимающий
QDataStream не помогает, так как он вставляет в начало служебную информацию, ну и подозреваю не только в начало.

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Декабрь 12, 2007, 02:05 »

Цитировать
qint64 QIODevice::write ( const char * data, qint64 maxSize )
qint64 QIODevice::writeData ( const char * data, qint64 maxSize ) 


Это должно помочь
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #2 : Декабрь 12, 2007, 20:57 »

Нужно записать двоичный файл подобного формата:

Поле1 LONG
Поле2 DWORD
Поле3 BYTE[4]

Вроде просто дальше некуда, но вот как средствами Qt сделать я не знаю...   Или нужно сходить на свежий воздух  Непонимающий
QDataStream не помогает, так как он вставляет в начало служебную информацию, ну и подозреваю не только в начало.



Батенька, что то Вы заблудились.
Только QDataStream Вам поможет.

Читай Assistant:

QDataStream дает богатый выбор на все случаи жизни:

QDataStream & operator<< ( qint8 i )
QDataStream & operator<< ( bool i )
QDataStream & operator<< ( quint8 i )
QDataStream & operator<< ( quint16 i )
QDataStream & operator<< ( qint16 i )
QDataStream & operator<< ( qint32 i )
QDataStream & operator<< ( quint64 i )
QDataStream & operator<< ( qint64 i )
QDataStream & operator<< ( quint32 i )
QDataStream & operator<< ( float f )
QDataStream & operator<< ( double f )
QDataStream & operator<< ( const char * s )


 и пишет только то что ты хочешь. Никакой служебной информации.
Запишешь два байта и в файле реальо только два байта, и т.д.

Там же и пример:

QFile file("file.xxx");
 file.open(QIODevice::WriteOnly);
 QDataStream out(&file);

 // Write a header with a "magic number" and a version
 out << (quint32)0xA0B0C0D0;
 out << (qint32)123;

Успехов в чтении документации.
Записан
burunduk
Гость
« Ответ #3 : Декабрь 13, 2007, 01:11 »

Я просто строки пытался писать, то там в начале DWORD с длиной ставило и в конце 0.
Да, действительно ничего лишнего уже не пишет, а для строк нужно использовать writeRawData()  :-)

А кстати версии для датастрима получается придумали только для представления встроенных Qt-типов, так ?
Именно они меня и натолкнули на подозрения о служебной информации.

P.S. а работать долго всё-таки вредно :-)
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #4 : Декабрь 13, 2007, 10:11 »

Я просто строки пытался писать, то там в начале DWORD с длиной ставило и в конце 0.
Да, действительно ничего лишнего уже не пишет, а для строк нужно использовать writeRawData()  :-)

А кстати версии для датастрима получается придумали только для представления встроенных Qt-типов, так ?
Именно они меня и натолкнули на подозрения о служебной информации.

P.S. а работать долго всё-таки вредно :-)

Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C.
Это упорядочивает их, не так ли?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Декабрь 13, 2007, 18:37 »

Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C.
Это упорядочивает их, не так ли?

На самолм деле QDataStream поддерживает намного большее кол-во чем приведено выше. Каждый тип сохраняеться в своём формате (служебная информация + данные etc). Подробне см. в ассистанте:

Format of the QDataStream Operators
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #6 : Декабрь 14, 2007, 17:12 »

Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C.
Это упорядочивает их, не так ли?

На самолм деле QDataStream поддерживает намного большее кол-во чем приведено выше. Каждый тип сохраняеться в своём формате (служебная информация + данные etc). Подробне см. в ассистанте:

Format of the QDataStream Operators

Это верно, однако был задан вопрос о сохранении в двоичном файле простых типов и на него был дан полный ответ.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 22.