Есть 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
Комментариев нет:
Отправить комментарий