在QdataStream中,为浮点数写4个字节是不可能,为double写8个字节?

时间:2011-11-17 17:51:05

标签: c++ qt

我需要(我必须)向qdatastream编写大量的浮点数,这是必要的,我只使用4个字节。 setFloatingPointPrecision或4或8写入浮点数和双精度数。 我认为它适用于qreal,但我很惊讶它适用于浮动双重类型..

有什么解决方案吗?谢谢

2 个答案:

答案 0 :(得分:4)

可能的解决方法是编写一个函数并重载它:

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

答案 1 :(得分:0)

如果您只想写四个字节,您是否考虑过static_cast doublefloat?我不确定qdatastream是什么,但可能对你有用。