FloatCDAB的十六进制与浮点数的相互转换
#include <stdio.h> #include <stdlib.h> #include <string.h> /// <summary> /// 浮点数转换成十六进制数组CDAB /// </summary> /// <param name="Modbus_HoldReg">返回四位十六进制指针</param> /// <param name="value">需要转换的浮点数</param> void FloatCDABToHex(char* Modbus_HoldReg[4],float value) { Modbus_HoldReg[0] = ((char*)(&value)) + 3; //低地址指向高位 Modbus_HoldReg[1] = ((char*)(&value)) + 2; Modbus_HoldReg[2] = ((char*)(&value)) + 1; Modbus_HoldReg[3] = ((char*)(&value)) + 0; //高地址指向低位 } /// <summary> /// 四位十六进制转换成浮点数CDAB /// </summary> /// <param name="recv">输入四位十六进制数组</param> /// <returns>返回转换后的浮点数</returns> float HexToFloatCDAB(char* recv) { float value; char* Modbus_HoldReg[4]; //定义保持寄存器指针数组 //第一步:指针初始化 Modbus_HoldReg[0] = ((char*)(&value)) + 3; //低地址指向高位 Modbus_HoldReg[1] = ((char*)(&value)) + 2; Modbus_HoldReg[2] = ((char*)(&value)) + 1; Modbus_HoldReg[3] = ((char*)(&value)) + 0; //高地址指向低位 //第二步:给地址指定的内存单元赋值(对应Modbus协议中的数据解析)FloatCDAB *Modbus_HoldReg[0] = recv[0]; *Modbus_HoldReg[1] = recv[1]; *Modbus_HoldReg[2] = recv[2]; *Modbus_HoldReg[3] = recv[3]; return value; } int main(void) { float freq; char* HoldReg[4];//定义保持寄存器指针数组 char hex[4]; FloatCDABToHex(HoldReg,0.2); for (int i = 0; i < 4; i++) { hex[i] = *HoldReg[i]; } char recv[4] = { 0x3d, 0xcc, 0xcc, 0xcd }; //浮点数为0.1的四位十六进制数组 freq = HexToFloatCDAB(recv); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2021-04-21 AD覆铜设置规则