Russian Qt Forum

Qt => Общие вопросы => Тема начата: bezzil от Октябрь 17, 2008, 11:21



Название: QByteArray записать qint32
Отправлено: bezzil от Октябрь 17, 2008, 11:21
Пытаюсь реализовать аналагичный код на Qt
Код:
		
long offs;
BYTE* result_buffer = new BYTE[r_size];
offs = ld_size+8;
memcpy(result_buffer,&offs,sizeof(offs));
result_buffer += sizeof(offs);

Так как для записи в файл в КуТе нужен QByteArray , исползую следующую код
Код:
qint32 offs;
QByteArray result_buffer;
offs = ld_size + 8;
result_buffer.append(offs);

в итоге получаю не то что ожидаю увидеть  :-[
В 1ом случае в исходном бинарнике выходит при offs равном 1032  - "08 04 00 00"
а при исползовании QByteArray получаю только - "08".
Явно что то делаю не так, но что именно понять не могу, подскажите пожалуйста.



Название: Re: QByteArray записать qint32
Отправлено: pastor от Октябрь 17, 2008, 11:26
Так как для записи в файл в КуТе нужен QByteArray

А поподробнее?

Открой для себя QDataStream (http://doc.trolltech.com/4.4/qdatastream.html)


Название: Re: QByteArray записать qint32
Отправлено: bezzil от Октябрь 17, 2008, 11:35
Цитировать
QIODevice Class Reference
qint64 write ( const QByteArray & byteArray )
ммм, я зацыклился на этой строчке вот и воевал с БайтЭреями. Попробую щас разабратся с ДатаСтримом.

Пы.Сы. Сделайте пожалуста раздел для таких как я "Ламерские вопросы" :D
не нада их в "темы на кандидаты на удаления" ((


Название: Re: QByteArray записать qint32
Отправлено: bezzil от Октябрь 17, 2008, 14:19
По теме, сделал стрим, привязал его к QByteArray, всё таки он нме нужен, для подсчёта контрольной суммы.
Закидываю туда нужные мне значения, и пытаюсь добавить ещё 2 QByteArray в которых предварительно были считанны 2 других бинарника.
Код:
QByteArray ld_buffer;
QByteArray fw_buffer;
ld_buffer += ld_file.read(ld_size);
fw_buffer += fw_file.read(fw_size);
QDataStream stream(&result_buffer,QIODevice::ReadWrite);
stream << size;
stream << ld_buffer;
stream << fw_buffer;

проблема в том что QByteArray хранит в начале размер записанных в нём данных, и при записи в ДатаСтрим происходит запись сначала этого размера, а потом уже самих данных. Подскажите пожалуйста как вытащить из QByteArray  данные.

Нашёл =)
Код:
char* ld_ptr = ld_buffer.data();
stream.writeRawData(ld_ptr, ld_size);



Название: Re: QByteArray записать qint32
Отправлено: Hort от Октябрь 17, 2008, 22:09
Код:
qint32 offs;
QByteArray result_buffer;
offs = ld_size + 8;
result_buffer.append(offs);
у тебя не получалось т.к. QByteArray - это контейнер элементом которого является char (1 байт), а метод append() добавляет 1 элемент в конец. потому у тебя и обрезались "лишние" данные


Название: Re: QByteArray записать qint32
Отправлено: bezzil от Октябрь 19, 2008, 16:37
действительно не получалось, но с лишними данными разобрался, они были размерами хранившимеся в начале QByteArray