2 / 2 / 0
Регистрация: 23.01.2015
Сообщений: 53
1

QDataStream, неправильная запись

05.04.2017, 15:32. Показов 399. Ответов 1
Метки нет (Все метки)

Здравствуйте!
Есть задача: нужно сформировать с помощью программы бинарный файл, который потом будет читаться другой программой.

Записываю файл я вот так:

C++ (Qt)
1
2
3
4
5
6
7
8
9
QDataStream& operator<<( QDataStream& ds, const TIP& tip)
{
    ds.setFloatingPointPrecision(QDataStream::SinglePrecision);
    ds << tip.int32_t_var1;
    ds << tip.int32_t_var2;
    ds << tip.int32_t_var3;
    ds << tip.float_var1;
    ds << tip.float_var1;
}
Читается он с помощью ifstream функцией read, но точно я сказать не могу, потому что доступа к исходникам той программы нет.
Наблюдается забавное поведение — если переменная равна нулю, то она читается нормально, если нет, то читается что-то странное типа 3.7615819e-037 или 50331648. В чём может быть проблема?

Добавлено через 17 минут
Добавил в начало строчку:

C++ (Qt)
1
ds.setByteOrder(QDataStream::LittleEndian);
Теперь все int32_t читаются нормально, а float-ы по прежнему не читаются.

Добавлено через 17 минут
Проблема решена.
Оказалось, что дело было в пропущенной переменной из-за которой ехало всё что было дальше.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2017, 15:32
Ответы с готовыми решениями:

QDataStream запись вектора
Как можно записать std вектор в бинарном виде просто указывая первый элемент и количество...

QDatastream запись unsigned char*
Как записать данные в буфере unsigned char*? Есть методы writeBytes и writeRawdata но они...

QDataStream запись/чтение exe-файлов
В общем, проблема в чем: после процедуры чтения данных из exe с помощью QDataStream, вывода в...

QDataStream и double
Добрый день коллеги. Столкнулся с проблемой чтения типа double из бинарного файла запись в...

1
1067 / 649 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
05.04.2017, 17:31 2
MongrellProg, QDataStream осуществляет платформонезависимую запись данных(сериализует данные). Читать записанные с его помощью данные можно только с помощью QDataStream. Зато на любой платформе.
Хотите записать данные напрямую - делайте это с помощью QFile::write. Хотите записать данные потоково - используйте обычный std::ostream.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2017, 17:31

QByteArray и QDataStream
Помогите разобраться с двумя типами данных QByteArray и QDataStream. Для того чтобы QByteArray...

QDataStream и ulong
Есть код: QFile file(fname); file.open(QIODevice::WriteOnly); QDataStream ds(&amp;file); ulong num...

QDataStream + char
Вообщем такая проблема. struct STRUCT_PACKET_DATA { quint64 packet_number; // номер пакета...

Работа с QDataStream
Здравствуйте, уважаемые форумчане! Подскажите пожалуйста, в чем могут скрываться грабли? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.