Название: Запись произвольных двоичных файлов Отправлено: burunduk от Декабрь 12, 2007, 02:01 Нужно записать двоичный файл подобного формата:
Поле1 LONG Поле2 DWORD Поле3 BYTE[4] Вроде просто дальше некуда, но вот как средствами Qt сделать я не знаю... Или нужно сходить на свежий воздух ??? QDataStream не помогает, так как он вставляет в начало служебную информацию, ну и подозреваю не только в начало. Название: Re: Запись произвольных двоичных файлов Отправлено: pastor от Декабрь 12, 2007, 02:05 Цитировать qint64 QIODevice::write ( const char * data, qint64 maxSize ) qint64 QIODevice::writeData ( const char * data, qint64 maxSize ) Это должно помочь Название: Re: Запись произвольных двоичных файлов Отправлено: Mikhail от Декабрь 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; Успехов в чтении документации. Название: Re: Запись произвольных двоичных файлов Отправлено: burunduk от Декабрь 13, 2007, 01:11 Я просто строки пытался писать, то там в начале DWORD с длиной ставило и в конце 0.
Да, действительно ничего лишнего уже не пишет, а для строк нужно использовать writeRawData() :-) А кстати версии для датастрима получается придумали только для представления встроенных Qt-типов, так ? Именно они меня и натолкнули на подозрения о служебной информации. P.S. а работать долго всё-таки вредно :-) Название: Re: Запись произвольных двоичных файлов Отправлено: Mikhail от Декабрь 13, 2007, 10:11 Я просто строки пытался писать, то там в начале DWORD с длиной ставило и в конце 0. Да, действительно ничего лишнего уже не пишет, а для строк нужно использовать writeRawData() :-) А кстати версии для датастрима получается придумали только для представления встроенных Qt-типов, так ? Именно они меня и натолкнули на подозрения о служебной информации. P.S. а работать долго всё-таки вредно :-) Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C. Это упорядочивает их, не так ли? Название: Re: Запись произвольных двоичных файлов Отправлено: pastor от Декабрь 13, 2007, 18:37 Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C. Это упорядочивает их, не так ли? На самолм деле QDataStream поддерживает намного большее кол-во чем приведено выше. Каждый тип сохраняеться в своём формате (служебная информация + данные etc). Подробне см. в ассистанте: Format of the QDataStream Operators (http://doc.trolltech.com/4.3/datastreamformat.html) Название: Re: Запись произвольных двоичных файлов Отправлено: Mikhail от Декабрь 14, 2007, 17:12 Ну вообще то никаких встроенных собенных Qt типов нет. Это только Qt названия обычных типов в стиле C. Это упорядочивает их, не так ли? На самолм деле QDataStream поддерживает намного большее кол-во чем приведено выше. Каждый тип сохраняеться в своём формате (служебная информация + данные etc). Подробне см. в ассистанте: Format of the QDataStream Operators (http://doc.trolltech.com/4.3/datastreamformat.html) Это верно, однако был задан вопрос о сохранении в двоичном файле простых типов и на него был дан полный ответ. |