1 十六进制字节数转浮点数

注意:使用此函数时传入的参数格式 例如QString str1 = "068400040002847D";字符串中间没有空格

float MainWindow::hexBytesToFloat(const QString &hexString)
{
    QByteArray byteArray; // 创建一个QByteArray对象byteArray
    for (int i = hexString.size() - 2; i >= 0; i -= 2)
    {
        bool ok;
        byteArray.append(hexString.mid(i, 2).toUInt(&ok, 16)); // 使用一个for循环遍历hexString中的每两个字符(因为一个字节由两个十六进制字符表示)并将它们转换为无符号整数,并追加到byteArray中。
    }

    float value; // 定义一个浮点数变量value
    memcpy(&value, byteArray.constData(), sizeof(value));    // memcpy函数将byteArray中的数据复制到value的内存地址。 constData()方法获取byteArray的常量指针,以及sizeof(value)来指定要复制的字节数。
    return value;
}

2. 浮点数转十六进制字节数

传入需要转换的浮点数 转换结果格式为
“4042ee8b”
注意!中间没有空格

QString MainWindow::floatToHexBytes(float value)
{
// 将浮点型的地址强转换为字符指针型 然后使用这个指针和浮点数的大小(通常为4字节)创建一个QByteArray对象
    QByteArray byteArray(reinterpret_cast<const char*>(&value), sizeof(value));  // byteArray包含浮点数的二进制表示
    QString hexString; //  初始化一个空的QString对象,用于存储转换后的十六进制字符串。
    for (int i = byteArray.size()-1; i >=0; --i)
    {
    // 循环内部,每次迭代都会取出一个字节,将其转换为无符号字符(以确保正确的十六进制表示),然后使用QString::arg方法将其格式化为两位的十六进制字符串。如果需要的话,会在左侧填充零。最后,将格式化后的字符串追加到hexString中。
        hexString.append(QString("%1").arg((unsigned char)byteArray.at(i), 2, 16, QChar('0')));
        
    }
    return hexString.toUpper();
}

中间有空格版本

QString floatToHexBytes1(float value)
{
    QByteArray byteArray(reinterpret_cast<const char*>(&value), sizeof(value));
    QString hexString;
    qDebug() << byteArray.size();
    for (int i = byteArray.size()-1; i >=0; --i)
    {
        if (i >= 0)
        {
            hexString.append(" ");
        }

        hexString.append(QString("%1").arg((unsigned char)byteArray.at(i), 2, 16, QChar('0')));

    }

    // 错的 字节反了
//    for (int i = 0; i <= byteArray.size()-1; i++)
//    {

//        hexString.append(QString("%1").arg((unsigned char)byteArray.at(i), 2, 16, QChar('0')));
//        if (i <= byteArray.size()-1)
//        {
//            hexString.append(" ");
//        }
//    }
    return hexString.toUpper();
}

输出结果 注意前面那个空格
在这里插入图片描述