将quint32重新解释为float

时间:2016-11-13 15:28:37

标签: c++ casting

在Qt中出乎意料地(对我而言),不可能将quint32重新解释为浮点值。

除了工会之外,还有其他方法可以重新解释变量吗?

union
{
 float f;
 quint32 q;
}u;

2 个答案:

答案 0 :(得分:0)

  quint32 i = 666;
  void * vp = &i;
  float f = *(float*)vp;

您也可以直接将i的地址强制转换为float *,但这会导致编译器抱怨违反严格的别名规则。并不是说在它们之间插入一个空指针使它变得“更好”,但至少它不会抱怨。

按预期工作,二进制666为1010011010,转换后f9.33265e-43,二进制为00000000000000000000001010011010 - 二进制表示相同。

确保在进行此类转换时,目标尺寸不大于源尺寸。在这种情况下,quint32和float都是4个字节,但是如果目标大于源,你将会读到“谁知道什么”,这可能会产生负面影响。

答案 1 :(得分:-1)

Qt http://doc.qt.io/qt-5/qvariant.html

的QVarinat课怎么样?

QVariant(qlonglong val).toFLoat()