四字节与浮点数之间的转换(c语言实现)
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语言实现)相关推荐
- C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...
单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...
- c语言四字节转浮点数_C语言浮点书于字节互相转换
//字节转为浮点数 float ByteToFloat(unsigned char m[]) { // 求符号位 float sig = 1.; if (m[3] >=128.) sig = - ...
- GBK和UTF8之间的转换 C语言
来自 :http://www.diybl.com/course/3_program/c++/cppsl/2008320/105871.html GBK和UTF8之间的转换可以使用MultiByteTo ...
- 宽字节与多字节之间的转换
string 与 wstring 相互间的转换 第一种方法 调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数 第二种方法 使 ...
- php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换
* 1.addslashes($str):为了数据库查询语句等的需要在某些字符前加上了反斜线:单引号,双引号,反斜线,建议使用DBMS自带的:mysqli_real_escape_string() * ...
- ieee 754四字节转浮点数c语言实现,IEEE-754标准浮点数,十六进制与十进制转换方法(附C代码)...
将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. 举例:已知一个数为2.5,IEEE-754标准浮点数表示为 40200000H. 16进制浮点数与十进制的转化 ...
- 兆、字节、位之间的转换
1M=1024k=1048576字节 算法是: 1Byte(字节) = 8bit(位) 1KB = 1024Byte(字节) 1MB = 1024KB 1GB = 1024MB 1TB = 1024G ...
- c语言基本数据类型之间的转换,C语言的基本数据类型及数据类型转换
C 语言数据类型包括基本类型.构造类型.指针类型3种,本文主要讨论基本类型. 基本类型包括:整型.字符型.实型和空类型. 其中整型数据包括基本整型(int--16bit).短整型(short--16b ...
- Java中字节数组和十六进制字符串之间的转换
1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...
最新文章
- 难忘的一天——装操系统(五)
- 2022-2028年中国生物类似药产业深度调研及前瞻分析报告
- 高效模式编写者的7个习惯
- MySQL笔记10:engine=innodb和engine=myisam的区别和用法!
- C++中的虚函数(virtual function)
- 学习ActiveMQ(一):安装与启动
- Jquery全选单选功能
- 12款优秀jQuery Ajax分页插件和教程
- 3D顶点转换和法线转换
- 海康sdk远程门禁_海康SDK-javademo实现
- Sniffer网络监视功能
- 深入浅出Oracle Spatial
- centos配置linuxptp
- 《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!
- 蓝凌LBPM平台,大公司流程数字化升级必选
- matlab 使得三维图形可以手动旋转,三维图形的平移,旋转与错切
- github中repositories与projects区别
- 前置++和后置++区别
- 3人3天喝3桶水,9人9天喝了多少桶水?
- 单片机播放WAV格式音频的理解
热门文章
- 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,“<<”,“>>”,使之能够用于矩阵的输入和输出,以及矩阵之和。
- 高级架构师,精通JAVA/高并发/微服务/分布式/中间件
- 计算机的屏幕约是16平方分米吗,电脑屏幕的面积大约是六平方分米对吗
- Cisco IOS上Segment Routing TE的简单实验
- 《中庸全评》岑晓冰封(编著)epub+mobi+azw3格式下载
- CTFHub | UA注入
- python操作微信电脑版_Python学习教程:教你用Python通过微信来控制电脑摄像头
- 剑侠情缘手游服务器bug修复,剑侠情缘手游19职业段氏修复无BUG版服务端+客户端+后台+网站+教程(带门客绝学小风车忘忧酒馆+特色神器)...
- 组织安全策略的四个组成部分及其目的
- 光子神经网络登上nature,图像识别速度降至1纳秒