Страницы

Поиск по вопросам

пятница, 28 июня 2019 г.

QByteArray во float

Есть QByteArray, в котором лежат несколько float. Нужно их оттуда вынуть и записать в соответствующие переменные. Пока единственным решением нашел копирование области памяти с помощью memcpy:
float f1, f2; memcpy(&f1, byteArray.data(), sizeof(float)); memcpy(&f2, byteArray.data()+sizeof(float), sizeof(float));
Если пытаться использовать QDataStream, то ничего путного не выходит, т.к. он пытается считать не 4 байта, а 8. Какие решения еще можно найти?


Ответ

Используйте класс QDataStream и setFloatingPointPrecision()
QByteArray arr; float f1, f2; QDataStream ds(&arr, QIODevice::ReadOnly); ds.setFloatingPointPrecision(QDataStream::SinglePrecision); ds >> f1 >> f2;
Чтобы попеременно читать double и float, нужно переключать режим точности.
QByteArray arr; float f1; double f2; QDataStream ds(&arr, QIODevice::ReadOnly); ds.setFloatingPointPrecision(QDataStream::SinglePrecision); ds >> f1; ds.setFloatingPointPrecision(QDataStream::DoublePrecision); ds >> f2;
Либо можно читать "сырые" байты:
QDataStream ds(&arr, QIODevice::ReadOnly); ds.readRawData(reinterpret_cast(&f1), sizeof(f1)); ds.readRawData(reinterpret_cast(&f2), sizeof(f2));

Комментариев нет:

Отправить комментарий