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; }