为什么在reinterpret_cast之后需要qDebug()?

时间:2013-03-18 06:45:43

标签: templates floating-point reinterpret-cast qdebug

在模板函数中,T是一个类型名称。这里的T是漂浮的。我有一个像ox41480000的ulonglong。根据IEEE R32.24,ox41480000作为浮点数为12.5。所以我用它来将qlonglong转换为float:T d =*reinterpret_cast<T*>(data);其中*data=0x41480000

演员表演后,我使用qDebug()<<d;打印d,它显示12.5是正确的。

但如果qDebug行被注释掉,那么d的值就变得非常奇怪了,比如1.485e-12!为什么??? (我还尝试使用QMessageBox打印d,其结果与qDebug相同。)

    template<typename T>

void canframeData::onRevData(qulonglong *data, unsigned int dlc)
{


    T d;

    `qulonglong revdata=*data;`
    qlonglong mask;
    mask = (m_size==(sizeof(d)<<3)? -1 : ((1ull<<m_size)-1));

    revdata=(revdata>>m_offset)&mask;
    d =*reinterpret_cast<T* >(&revdata);
    qDebug()<<"d="<<d;// get a wrong value if delete this line
    (m_pdata->*(m_pdata->pSetValue))(QVariant(d));
}

0 个答案:

没有答案