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(); }
输出结果 注意前面那个空格
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端