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