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

0.头文件添加

#include <math.h>

1.浮点数转换为四字节

void FloatToByte(float floatNum,unsigned char* byteArry)
{char* pchar=(char*)&floatNum;for(int i=0;i<4;i++){*byteArry=*pchar;pchar++;byteArry++;}
}

2.四字节转换为浮点数

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^23float 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 <math.h>
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^23float 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<4;i++){*byteArry=*pchar;pchar++;byteArry++;}
}
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;
}

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

  1. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...

    单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...

  2. c语言四字节转浮点数_C语言浮点书于字节互相转换

    //字节转为浮点数 float ByteToFloat(unsigned char m[]) { // 求符号位 float sig = 1.; if (m[3] >=128.) sig = - ...

  3. GBK和UTF8之间的转换 C语言

    来自 :http://www.diybl.com/course/3_program/c++/cppsl/2008320/105871.html GBK和UTF8之间的转换可以使用MultiByteTo ...

  4. 宽字节与多字节之间的转换

    string 与 wstring 相互间的转换 第一种方法 调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数 第二种方法 使 ...

  5. php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换

    * 1.addslashes($str):为了数据库查询语句等的需要在某些字符前加上了反斜线:单引号,双引号,反斜线,建议使用DBMS自带的:mysqli_real_escape_string() * ...

  6. ieee 754四字节转浮点数c语言实现,IEEE-754标准浮点数,十六进制与十进制转换方法(附C代码)...

    将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. 举例:已知一个数为2.5,IEEE-754标准浮点数表示为 40200000H. 16进制浮点数与十进制的转化 ...

  7. 兆、字节、位之间的转换

    1M=1024k=1048576字节 算法是: 1Byte(字节) = 8bit(位) 1KB = 1024Byte(字节) 1MB = 1024KB 1GB = 1024MB 1TB = 1024G ...

  8. c语言基本数据类型之间的转换,C语言的基本数据类型及数据类型转换

    C 语言数据类型包括基本类型.构造类型.指针类型3种,本文主要讨论基本类型. 基本类型包括:整型.字符型.实型和空类型. 其中整型数据包括基本整型(int--16bit).短整型(short--16b ...

  9. Java中字节数组和十六进制字符串之间的转换

    1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...

最新文章

  1. 难忘的一天——装操系统(五)
  2. 2022-2028年中国生物类似药产业深度调研及前瞻分析报告
  3. 高效模式编写者的7个习惯
  4. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!
  5. C++中的虚函数(virtual function)
  6. 学习ActiveMQ(一):安装与启动
  7. Jquery全选单选功能
  8. 12款优秀jQuery Ajax分页插件和教程
  9. 3D顶点转换和法线转换
  10. 海康sdk远程门禁_海康SDK-javademo实现
  11. Sniffer网络监视功能
  12. 深入浅出Oracle Spatial
  13. centos配置linuxptp
  14. 《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!
  15. 蓝凌LBPM平台,大公司流程数字化升级必选
  16. matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切
  17. github中repositories与projects区别
  18. 前置++和后置++区别
  19. 3人3天喝3桶水,9人9天喝了多少桶水?
  20. 单片机播放WAV格式音频的理解

热门文章

  1. 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,“<<”,“>>”,使之能够用于矩阵的输入和输出,以及矩阵之和。
  2. 高级架构师,精通JAVA/高并发/微服务/分布式/中间件
  3. 计算机的屏幕约是16平方分米吗,电脑屏幕的面积大约是六平方分米对吗
  4. Cisco IOS上Segment Routing TE的简单实验
  5. 《中庸全评》岑晓冰封(编著)epub+mobi+azw3格式下载
  6. CTFHub | UA注入
  7. python操作微信电脑版_Python学习教程:教你用Python通过微信来控制电脑摄像头
  8. 剑侠情缘手游服务器bug修复,剑侠情缘手游19职业段氏修复无BUG版服务端+客户端+后台+网站+教程(带门客绝学小风车忘忧酒馆+特色神器)...
  9. 组织安全策略的四个组成部分及其目的
  10. 光子神经网络登上nature,图像识别速度降至1纳秒