テンプレート関数では、T は型名です。ここで T は float です。ox41480000 のような ulonglong があります。IEEE R32.24 によると、ox41480000 は float として 12.5 です。だから私はこれを使って qlonglong を float: T d =*reinterpret_cast<T*>(data);
whereに変換し*data=0x41480000
ます。
キャスト後、qDebug()<<d
;を使用します。d を印刷すると、正しい 12.5 が表示されます。
しかし、qDebug 行がコメントアウトされている場合、d の値は 1.485e-12 のように非常に奇妙なものになります! どうして???d
(また、qDebug と同じ結果を得たQMessageBox を印刷しようとしました。)
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));
}