QT实现IEEE754转换

Posted hiwjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT实现IEEE754转换相关的知识,希望对你有一定的参考价值。

  

由于需要和OMRON PLC进行FINS通信,所以需要进行格式转换。

 

①浮点转16进制字符串

QString MainWindow::ieee754_float_to_hex_str(QString str){

    const float value =  str.toFloat();
    const quint32 *i = reinterpret_cast<const quint32 *>(&value);

    QByteArray ba;
    ba.append(char(*i >> 24));
    ba.append(char(*i >> 16));
    ba.append(char(*i >>  8));
    ba.append(char(*i >>  0));
    return ba.toHex().toUpper();

}

 

②16进制字符串转浮点

float MainWindow::ieee754_hex_str_to_float(QString str){

    const QByteArray ba = QByteArray::fromHex(str.toLatin1());

    if (ba.size() != 4){
        return 0;
    }

    quint32 word = quint32((quint8(ba.at(0)) << 24) |
                           (quint8(ba.at(1)) << 16) |
                           (quint8(ba.at(2)) <<  8) |
                           (quint8(ba.at(3)) <<  0));

    const float *f = reinterpret_cast<const float *>(&word);
    return *f;

}

 

以上是关于QT实现IEEE754转换的主要内容,如果未能解决你的问题,请参考以下文章

IEEE754是啥

浮动到双倍(IEEE754)转换

使用 IEEE 754 标准(32 位)将数字转换为二进制

将十进制转换为 IEEE-754 格式

将负分数转换为 IEEE 754

IEEE754——4字节实数与十六进制的转换