#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;
}
![]()