Qt中字节与浮点数互转

news/2024/11/27 18:23:03/文章来源:https://www.cnblogs.com/lswnote/p/18572850

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

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

float MainWindow::hexBytesToFloat(const QString &hexString)
{QByteArray byteArray; // 创建一个QByteArray对象byteArrayfor (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; // 定义一个浮点数变量valuememcpy(&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();
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842418.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5-4 图片路径详解

绝对路径 相对路径 网络路径 1、绝对路径:电脑的盘符储存与访问的具体地址D:\qianduan\qianduan1.jpg <img src="D:\qianduan\qianduan1.jpg" > 2、相对路径:两者相对的关系,两者在同一路径下可以访问子集关系: /父级关系:../同级关系:./ (可以省略) …

数字孪生在智慧消防中能够发挥什么作用?

近年来,数字孪生技术在智慧城市的多个领域得到广泛应用,而在智慧消防中,其独特的优势更是为消防工作注入了强劲动力。通过数字孪生技术,消防管理可以从传统的事后应对转变为全面的事前预防、实时监测和精准指挥,为城市安全带来革命性的提升。 实现消防设施全景监控 数字孪…

SpringBoot 如何解析配置文件中的list?

1.情景展示在配置文件当中,我们是可以使用list来设置参数对应的参数值的(也就是:参数值可以是list)。 YML文件如上图所示,在配置文件当中(如:Yml) ,我们是可以直接使用list。 其格式就是: 下划线➕空格,后面跟数组元素即可,一行就代表一个元素。 properties文件 如…

一个不错的软件版本命名规范!

之前写了一篇如何自动生成版本号的文章, 《让你的C程序,自动打印版本信息》 初衷是让自己的程序在运行时自动打印与版本相关的信息, 避免测试时因为版本信息不确定导致的一些功能对应不上去的问题, 当时留了一个坑,写一篇关于如何设计一个相对规范的版本号的文章, 现在把…

css 三角形

.threes{position: relative;}.threes::before {position: absolute;top: -6rpx;right: -50rpx;content: "";display: inline-block;width: 0;height: 0;border-left: 10rpx solid transparent; /* 调整这个值以改变三角形的大小 */border-bottom: 10rpx solid #1780…

直播预约 | 数据驱动:直击离散制造业数智化转型实践

11月28日,KaiwuDB 携手施耐德电气全球供应链中国及中工互联联合发起《数据驱动:直击离散制造业数智化转型实践》主题直播,欢迎观看。11月28日,KaiwuDB 携手施耐德电气全球供应链中国及中工互联联合发起《数据驱动:直击离散制造业数智化转型实践》主题直播,针对离散制造业…

隔行/列设置背景色

1. 概述编辑1.1 问题描述 通过根据条件显示不同背景色可以实现满足某条件时,改变行/列的背景色,那么如果表格的行与行之间需要显示为不同的颜色,该如何实现呢? 1.2 解决思路 通过在「条件属性>背景」中使用公式 row() 获取行号(公式 col() 获取列号),再通过计算实现。…

使用命令打开SQLServer配置管理器

当安装完sqlserver数据库后 发现找不到菜单sqlserver配置管理器时使用命令(window+r)打开cmd端,根据sqlserver版本号选择对应命令SQLServerManager15.msc(对于 SQLServer2019) SQLServerManager14.msc(对于 SQLServer2017) SQLServerManager13.msc(对于 SQLServer2016) SQLServ…

c#配置文件的使用记录

我有一个控制台应用程序, 其中有一些变量我想写在配置文件中 原来的app.config是这样的位置放在configuration中程序的引用中添加 在程序中使用如下写法即可取得配置中的对应值 string userNo = ConfigurationManager.AppSettings["UserNo"];

数据库开发规范v1.0

一、建表规约【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否)。说明:任何字段如果为非负数,必须是 unsigned。 正例:表达逻辑删除的字段名 deleted_flag,0 表示删除,1 表示未删除。【强制】表名、字段名必…

ABAP开发规范V1.0

1. 概要 1.1目的 该文档定义了在开发与维护ABAP程序过程中必须遵守的规范与标准。该文档应当被视为一个动态的文档,该文档会根据需要进行增补和修订。 开发规范的重要作用在于保持整个开发团队的开发风格一致,提高程序质量,降低维护压力。 1.2适用范围 所有ABAP开发及系统配…

如何保证RocketMQ消息不丢失

如何保证RocketMQ消息不丢失 目录如何保证RocketMQ消息不丢失背景什么情况下RokectMQ消息会丢失解决RocketMQ消息丢失问题消息生产防止消息丢失Broker端消息丢失消费端处理消息总结 背景 在金融系统中MQ消息的消息丢失是不允许的,消息的丢失会导致支付状态订单状态出现混乱。接…