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 @   阿坦  阅读(715)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2021-04-21 AD覆铜设置规则
点击右上角即可分享
微信分享提示