相关文章推荐
稳重的人字拖  ·  为什么编写的程序没有报错但是运行不出来 - ...·  1 年前    · 
豪情万千的土豆  ·  enum和std::string的自动互相转 ...·  2 年前    · 
俊秀的熊猫  ·  input 离开事件_js input ...·  2 年前    · 
老实的雪糕  ·  Python 安装下载好的 ...·  2 年前    · 
慷慨大方的仙人掌  ·  第8篇:C++容器对象的枚举模式 - 知乎·  2 年前    · 
Code  ›  C语言:十六进制(HEX)和浮点类型(float、double)转换开发者社区
十六进制 hex c语言 浮点
https://cloud.tencent.com/developer/article/1776042
逃课的黑框眼镜
2 年前
作者头像
不脱发的程序猿
0 篇文章

C语言:十六进制(HEX)和浮点类型(float、double)转换

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > AIoT技术交流、分享 > C语言:十六进制(HEX)和浮点类型(float、double)转换

C语言:十六进制(HEX)和浮点类型(float、double)转换

作者头像
不脱发的程序猿
发布 于 2021-01-20 11:11:05
3.4K 0
发布 于 2021-01-20 11:11:05
举报

目录

1、浮点类型转换为十六进制

方法1:用地址用指针

方法2:用共用体

方法3: 使用memcpy

2、十六进制转换为浮点类型


近日在研究Modbus协议的时候遇到这样一个情况:使用ModScan32软件,可将HEX和浮点类型转换,如下所示:

那么如何在程序设计中实现十六进制和浮点类型转换呢?

C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

无论是单精度还是双精度在存储中都分为三个部分:

1、符号位(Sign) :0代表正,1代表为负;

2、指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储;

3、尾数部分(Mantissa):尾数部分。

其中float的存储方式如下图所示:

而双精度的存储方式为:

了解了基本概念后咱就开始代码实现吧~

1、浮点类型转换为十六进制

方法1:用地址用指针

#include "stdio.h"
int main(void)
 float fa = 123.56;
 char farray[4] = {0};
 *(float*)farray = fa;
 printf("%f\n",*(float*)farray);
 return (0);
}

输出结果:

123.559998

方法2:用共用体

#include "stdio.h"
union {
 float fa;
 char farray[4];
}utemp;
int main(void)
 int i = 0;
 float ft = 0.0;
 utemp.fa = (float)123.56;
 ft = *(float*)utemp.farray;
 printf("%f\n",ft);
 return (0);
}

输出结果:

123.559998

方法3: 使用memcpy

#include "stdio.h"
#include "string.h"
int main(void)
 float fa;
 char farray[4];
 float ft; 
 fa = 45.23;
 memcpy(farray,&fa,sizeof(farray));
 memcpy(&ft,&farray,sizeof(farray)); 
 printf("%f\n",ft);
 return (0);
}

输出结果:

45.230000

2、十六进制转换为浮点类型

#include "stdio.h"
int main(void)
 
推荐文章
稳重的人字拖  ·  为什么编写的程序没有报错但是运行不出来 - CSDN文库
1 年前
豪情万千的土豆  ·  enum和std::string的自动互相转换 - 知乎
2 年前
俊秀的熊猫  ·  input 离开事件_js input 离开事件_js离开input框事件 - 腾讯云开发者社区 - 腾讯云
2 年前
老实的雪糕  ·  Python 安装下载好的 tar.gz_51CTO博客_python tar.gz
2 年前
慷慨大方的仙人掌  ·  第8篇:C++容器对象的枚举模式 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号