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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray записать qint32  (Прочитано 6656 раз)
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".
Явно что то делаю не так, но что именно понять не могу, подскажите пожалуйста.

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Октябрь 17, 2008, 11:26 »

Так как для записи в файл в КуТе нужен QByteArray

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

Открой для себя QDataStream
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
bezzil
Гость
« Ответ #2 : Октябрь 17, 2008, 11:35 »

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

Пы.Сы. Сделайте пожалуста раздел для таких как я "Ламерские вопросы" Веселый
не нада их в "темы на кандидаты на удаления" ((
« Последнее редактирование: Октябрь 17, 2008, 12:00 от bezzil » Записан
bezzil
Гость
« Ответ #3 : Октябрь 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);

« Последнее редактирование: Октябрь 17, 2008, 14:48 от bezzil » Записан
Hort
Гость
« Ответ #4 : Октябрь 17, 2008, 22:09 »

Код:
qint32 offs;
QByteArray result_buffer;
offs = ld_size + 8;
result_buffer.append(offs);
у тебя не получалось т.к. QByteArray - это контейнер элементом которого является char (1 байт), а метод append() добавляет 1 элемент в конец. потому у тебя и обрезались "лишние" данные
Записан
bezzil
Гость
« Ответ #5 : Октябрь 19, 2008, 16:37 »

действительно не получалось, но с лишними данными разобрался, они были размерами хранившимеся в начале QByteArray
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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