Разве невозможно написать 4 байта для числа с плавающей запятой и 8 для двойного в QdataStream? - PullRequest
1 голос
/ 17 ноября 2011

Мне нужно (я должен) написать много поплавков в qdatastream, и необходимо использовать только 4 байта. setFloatingPointPrecision или записывает 4 или 8 как для чисел с плавающей точкой, так и для чисел с удвоением. Я думал, что это применимо к qreal, но я удивляюсь, что он работает на float типа double ..

Есть ли решение? Спасибо

Ответы [ 2 ]

4 голосов
/ 17 ноября 2011

Возможный обходной путь - написать функцию и перегрузить ее:

void writeReal(QDataStream& out, float f)
{
    out.setFloatingPointPrecision(QDataStream::SinglePrecision);
    out << f;
}

void writeReal(QDataStream& out, double f)
{
    out.setFloatingPointPrecision(QDataStream::DoublePrecision);
    out << f;
}

Теперь просто используйте эту функцию для сериализации чисел с плавающей запятой и двойных чисел

QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); 
writeReal(out, (float) 3.14);  // Casting to float so single precision will be used
writeReal(out, (double) 3.14); // Casting to double so double precision will be used
0 голосов
/ 17 ноября 2011

Если вы хотите записать только четыре байта, рассматривали ли вы static_cast перевод ваших double s в float? Я не уверен, что за qdatastream, но это может сработать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...