在模板函数中,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));
}