modbus流量计数据解析(4个字节与float的换算)

2024-06-18 22:12

本文主要是介绍modbus流量计数据解析(4个字节与float的换算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过modbus协议从流量计中读取数据后,需要将获得的字节数据合成float类型。以天信流量计为例:
在这里插入图片描述
如何将字节数据合并成float类型呢?这里总结了三种方法。
以温度值41 A0 00 00为例

目录

  • 1、使用char*逐字节解析
  • 2、使用memcpy转换
  • 2、使用联合体union转换

1、使用char*逐字节解析

float为4个字节,将这4个字节依次解析用获取的温度值数据进行替换,就能够完成转换。
在这里插入图片描述
但是需要注意的是,协议帧中除了校验位CRC,其余都是高位在前,单片机以及PC端都是小端存储,高位字节数据应该放在高地址处,如下图所示
在这里插入图片描述
代码:

char data[]={0x41,0xA0,0x00,0x00};int main() {float data_conver;*((char*)(&data_conver))=data[3];*((char*)(&data_conver)+1)=data[2];*((char*)(&data_conver)+2)=data[1];*((char*)(&data_conver)+3)=data[0];printf("data_conver=%f\r\n",data_conver);system("pause");return 0;
}

结果:
在这里插入图片描述

2、使用memcpy转换

因为高字节在前,因此直接使用memcpy进行复制内容时,需要先将获取的字节数据倒序
代码:

//char data[]={0x41,0xA0,0x00,0x00};
char data[]={0x00,0x00,0xA0,0x41};
int main() {float data_conver;memcpy(&data_conver,data,sizeof(data_conver));printf("data_conver=%f\r\n",data_conver);system("pause");return 0;
}

结果:
在这里插入图片描述

2、使用联合体union转换

联合体union中的数据共用同一段内存,可以使用这个特性对数据进行类型转换
代码:

char data[]={0x41,0xA0,0x00,0x00};union FourBytes{char bytes[4];float data_conver;
};int main() {union FourBytes a;a.bytes[0]=data[3];a.bytes[1]=data[2];a.bytes[2]=data[1];a.bytes[3]=data[0];printf("data_conver=%f\r\n",a.data_conver);system("pause");return 0;
}

结果:
在这里插入图片描述

以上三种方法都能实现字节和float数据的转换

这篇关于modbus流量计数据解析(4个字节与float的换算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073194

相关文章

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认