C++ 是否不可能在QdataStream中为浮点写入4字节,为双精度写入8字节?
我需要(我必须)向一个qdatastream写入很多浮点值,而且我只需要使用4个字节。 setFloatingPointPrecision或为浮点和双精度写入4或8。 我原以为它适用于qreal,但我很惊讶它适用于float-a-double类型C++ 是否不可能在QdataStream中为浮点写入4字节,为双精度写入8字节?,c++,qt,C++,Qt,我需要(我必须)向一个qdatastream写入很多浮点值,而且我只需要使用4个字节。 setFloatingPointPrecision或为浮点和双精度写入4或8。 我原以为它适用于qreal,但我很惊讶它适用于float-a-double类型 有什么解决办法吗?谢谢如果你只想写四个字节,你有没有考虑过将你的doubles转换成float?我不确定什么是qdatastream,但这可能适合您。如果您只想写入四个字节,您是否考虑过静态\u强制转换将双精度转换为浮点?我不确定什么是qdatastr
有什么解决办法吗?谢谢如果你只想写四个字节,你有没有考虑过将你的
double
s转换成float
?我不确定什么是qdatastream
,但这可能适合您。如果您只想写入四个字节,您是否考虑过静态\u强制转换将双精度转换为浮点?我不确定什么是qdatastream
,但这可能适合您。一个可能的解决方法是编写函数并重载它:
void writeReal(QDataStream& out, float f)
{
out.setFloatingPointPrecision(QDataStream::SinglePrecision);
out << f;
}
void writeReal(QDataStream& out, double f)
{
out.setFloatingPointPrecision(QDataStream::DoublePrecision);
out << f;
}
一种可能的解决方法是编写函数并重载它:
void writeReal(QDataStream& out, float f)
{
out.setFloatingPointPrecision(QDataStream::SinglePrecision);
out << f;
}
void writeReal(QDataStream& out, double f)
{
out.setFloatingPointPrecision(QDataStream::DoublePrecision);
out << f;
}
我正在使用Qdatastream来管理我的数据I/o操作。思考未来,网络沟通,平台独立,终端自由。另外,我不想将double强制转换为float,我只想使用4个字节作为float,8个字节作为double。setFloatingPrecision应用程序4或8同时使用…我正在使用Qdatastream管理我的数据I/o操作。思考未来,网络沟通,平台独立,终端自由。另外,我不想将double强制转换为float,我只想使用4个字节作为float,8个字节作为double。Qdatastream.setFloatingPrecision应用程序4或8两者都有…在持久存储或网络通信中放置任何类型的浮点数字都是不明智的。唉,IEEE浮点并不是唯一的浮点运算。@zack,因此他使用Qt的存储/网络机制(基于下面的评论)。只要他声明在每一端使用哪个版本,表示将保持不变,并且存储数据不会出现问题@g19fanatic该文档中唯一提到的浮点格式(与大小相反)是@g19fanatic我刚刚检查了代码,它没有做正确的事情。它盲目地假设本机浮点格式是IEEE。请参阅@Zack,或者QDataStream可以在Qt支持的每个平台上正常工作。如果不是这样的话,我会感到惊讶。在持久存储或网络通信中放置任何类型的浮点数都是不明智的。唉,IEEE浮点并不是唯一的浮点运算。@zack,因此他使用Qt的存储/网络机制(基于下面的评论)。只要他声明在每一端使用哪个版本,表示将保持不变,并且存储数据不会出现问题@g19fanatic该文档中唯一提到的浮点格式(与大小相反)是@g19fanatic我刚刚检查了代码,它没有做正确的事情。它盲目地假设本机浮点格式是IEEE。请参阅@Zack,或者QDataStream可以在Qt支持的每个平台上正常工作。如果不是这样的话,我会很惊讶。这几乎是完美的,非常感谢你的胡言乱语。我唯一要添加的是读取并恢复floatingPointPrecision的初始值,以保持POLA。为什么不在每次输入/输出浮点时简单地设置为single并返回到double,并将默认值保留为double?这几乎是完美的,非常感谢这一混乱。我唯一要添加的是读取并恢复floatingPointPrecision的初始值,以保持POLA。为什么不在每次输入/输出浮点时简单地设置为single并返回到double,并将默认值保留为double?