在arm32中浮点数与16进制转换

本文介绍了一种利用联合体实现浮点数与十六进制数据之间的相互转换的方法。通过具体的C语言代码示例,展示了如何将浮点数转换为4字节的十六进制数组,并反向转换回原始的浮点数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef union 
{
    float float_data;
    char hex_data[4];
}float2hex;

通过联合体占用成员最大内存的机制转换float。

float hex_2_float(char *buf)
{
    float2hex temp;
    if(buf !=NULL)
    {    
        temp.hex_data[0] = buf[3];
        temp.hex_data[1] = buf[2];
        temp.hex_data[2] = buf[1];
        temp.hex_data[3] = buf[0];    
    }    
    return temp.float_data;
}

输入一个4字节的buf[4]={0x43,0x5B,0xE6,0x66};输出float temp=219.9。

void float_2_hex(float data,char *buf)
{
    float2hex temp;
    temp.float_data = data;
    buf[0] = temp.hex_data[3];
    buf[1] = temp.hex_data[2];
    buf[2] = temp.hex_data[1];
    buf[3] = temp.hex_data[0];
    
}

输入浮点数data,存储16进制的4字节数组buf[4]。

例如输入219.9,temp_buf[4],输出temp_buf[4]={0x43,0x5B,0xE6,0x66}。

由于使用STM32,该芯片是小端模式,所以程序中转换了顺序,使用时不需要调转顺序直接用即可。

注意点,浮点数不要用==做比较,浮点数存在精度问题,无法准确相等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值