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