四字节与浮点数之间的转换(c语言实现)

您所在的位置:网站首页 字节怎么换算成G 四字节与浮点数之间的转换(c语言实现)

四字节与浮点数之间的转换(c语言实现)

2023-11-03 06:18| 来源: 网络整理| 查看: 265

C语言中对于float类型的数据,主要使用4字节进行存储,以下为干货。实现四字节与浮点数之间的转换。

0.头文件添加

#include

1.浮点数转换为四字节

void FloatToByte(float floatNum,unsigned char* byteArry) { char* pchar=(char*)&floatNum; for(int i=0;i // 求符号位 float sig = 1.; if (m0 >=128.) sig = -1.; //求阶码 float jie = 0.; if (m0 >=128.) { jie = m0-128. ; } else { jie = m0; } jie = jie * 2.; if (m1 >=128.) jie += 1.; jie -= 127.; //求尾码 float tail = 0.; if (m1 >=128.) m1 -= 128.; tail = m3 + (m2 + m1 * 256.) * 256.; tail = (tail)/8388608; // 8388608 = 2^23 float f = sig * pow(2., jie) * (1+tail); return f; }

3.main函数进行测试

int main(void) { log_init(); while(1) { float c=0.04; unsigned char bcd[4]={0x0A, 0xD7, 0x23, 0x3D}; FloatToByte(c,bcd); NRF_LOG_INFO("%x %x %x %x\r\n",bcd[0],bcd[1],bcd[2],bcd[3]); float q=b2f(0xBB, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM1 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); q=b2f(0x3D, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM2 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); nrf_delay_ms(1000); } return 0; }

其中浮点数测试为0.04,通过log打印输出显示四字节: 在这里插入图片描述

四字节数据 0x0A,0xD7,0x23,0xBB转换浮点数显示为: 在这里插入图片描述

四字节数据 0x0A,0xD7,0x23,0x3D转换浮点数显示为: 在这里插入图片描述

4.整体代码

#include typedef unsigned char byte; float b2f(byte m0, byte m1, byte m2, byte m3) { // 求符号位 float sig = 1.; if (m0 >=128.) sig = -1.; //求阶码 float jie = 0.; if (m0 >=128.) { jie = m0-128. ; } else { jie = m0; } jie = jie * 2.; if (m1 >=128.) jie += 1.; jie -= 127.; //求尾码 float tail = 0.; if (m1 >=128.) m1 -= 128.; tail = m3 + (m2 + m1 * 256.) * 256.; tail = (tail)/8388608; // 8388608 = 2^23 float f = sig * pow(2., jie) * (1+tail); return f; } void FloatToByte(float floatNum,unsigned char* byteArry) { char* pchar=(char*)&floatNum; for(int i=0;i log_init(); while(1) { float c=0.04; unsigned char bcd[4]={0x0A, 0xD7, 0x23, 0x3D}; FloatToByte(c,bcd); NRF_LOG_INFO("%x %x %x %x\r\n",bcd[0],bcd[1],bcd[2],bcd[3]); float q=b2f(0xBB, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM1 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); q=b2f(0x3D, 0x23, 0xD7, 0x0A);//反向 NRF_LOG_INFO("float NUM2 is :"NRF_LOG_FLOAT_MARKER"\r\n",NRF_LOG_FLOAT(q)); nrf_delay_ms(1000); } return 0; }

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3