Страницы

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

четверг, 9 апреля 2020 г.

QByteArray во float

#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));

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

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