0

在模板函数中,T 是类型名。这里的 T 是浮动的。我有一个像ox41480000这样的乌龙。根据 IEEE R32.24,ox41480000 是 12.5 作为浮点数。所以我用它来将 qlonglong 转换为 float: T d =*reinterpret_cast<T*>(data);where *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));
}
4

0 回答 0