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

 

posted @ 2023-04-21 15:05  阿坦  阅读(964)  评论(0)    收藏  举报