0

テンプレート関数では、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));
}
4

0 に答える 0