---------------------------------------------
-- 时间:2019-01-11
-- 创建人:Ruo_Xiao
-- 邮箱:xclsoftware@163.com
---------------------------------------------

这两天在处理TCP发送数据的问题,对方发来4个字节的浮点数的16进制,当时脑袋一懵,看着这4个16进制的数不知道怎么转成10进制的浮点数了。

直到后来想到内存中存放的数据的意义完全取决于读取它的方式,例如:3F 80 00 00,按照整数去读,其含义就是1065353216,但是按照浮点数读,其结果就是1。

所以按照上述思路,解决该问题的方法就是用不同的数据类型读取该内存,即可知道该值的具体含义。

栗子:

#include<iostream>
using namespace std;int main()
{   unsigned char s[4]; s[0]=0x00; s[1]=0x00;s[2]=0x80;s[3]=0x3f; float *pf1=(float*)s;float f2;memcpy_s(&f2 , sizeof(float) , s , 4);cout<<"结果:"<<endl;cout<<"pf1 = "<<*pf1<<endl;cout<<"f2 = "<<f2<<endl;cin.get();return 0;
}

结果为:

有些小伙伴可能会有疑问,1的4个字节的十六进制浮点数是 3F 80 00 00,为什么例程中 s 的数组中数值的顺序是00 00 80 3F呢?其实该答案是因为我的电脑的系统是Windows,所以在内存中字节摆放时序是小端模式,即:低字节放入内存低地址中,高字节放入高地址中。所以按照Windows检测,其s中数据的排布正好是3F 80 00 00。所以按照float型读取,该内存中的值即为1

拓展

实际上32位十六进制浮点数是如何转换为十进制浮点数的呢。咱们来举栗说明:

58 65 80 00,其二进制为 0101 1000 0110 0101 1000 0000 0000 0000。

(1)符号位为0,则该浮点数是正数。

(2)指数部分为101 1000 0,转换成十进制为176,再减去127,得到指数位为49。

(3)尾数部分为110 0101 1000 0000 0000 0000,转成小数的方法是从小数点开始,第1个小数乘以2的(-1)次方,第2个小数乘以2的(-2)次方,以此类推,所有的结果相加就是小数。经过计算,尾数部分的结果为0.79296875。

经过上述操作,该实数为1.79296875*2的49次方,最终结果为:1.009351674298368*10的15次方。

关于float在内存中的表达请看如下链接:https://blog.csdn.net/itworld123/article/details/78914969

(SAW:Game Over!)

32位十六进制浮点数转换为十进制浮点数的方法相关推荐

  1. 将IP地址转换为整数--将32位的二进制转换为十进制

    object Test01_IP地址计算 {def main(args: Array[String]): Unit = {val ip:String = "1.0.3.255"va ...

  2. 十六进制字符串转换为十进制

    十进制字符串转换为十进制数 char *str = "123"; int n = atoi(str); printf("%d\n", n);//输出:123 十 ...

  3. 十六进制的转换为十进制两种常见方法

    十六进制的转换为十进制两种常见方法 好久以前学的都忘了,正好复习一下 对于十六进制转十进制 第一种:快速法(自己挺喜欢第一种的快捷) 比如: 012A=0 X 163 + 1 X 162+ 2 X 1 ...

  4. 二进制转换为十进制的简便方法

    二进制转换为十进制的简便方法. 原来方法: 从最后一位开始算,依次列为第0.1.2...位 第n位的数(0或1)乘以2的n次方 得到的结果相加就是答案 例如: 01101011转十进制: 第0位:1乘 ...

  5. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...

    java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...

  6. IEEE-754标准(32位) 十六进制转换十进制浮点数

    因实验需要,读取陀螺仪的数据是16进制的数据,需要将该数据转化为10进制方便自己查看,理解.记录如下: 1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. f ...

  7. 将IEEE制浮点数转换为十进制

    题目: 按4字节浮点数格式用0和1组成的字符串从键盘输入,转换为十进制数显示.例:输入0 1000 0100 1100 1100 1000 1111 0101 110,显示57.57. 作业碰到了这题 ...

  8. 8位十六进制转换32位十六进制_网络中的数制系统--二进制十六进制与十进制之间的相互转换...

    网络中计算机的32位IPv4地址以二进制显示,也会以点分十进制显示.而IPv6的地址是128位,是由数字和A-F组成的十六进制系统.因此,了解并且学会在其三者之间相互转换是非常重要的,让我们能够更好的 ...

  9. Linux网络编程笔记 - 05 地址转换函数 32位整数,转换为点分十进制

    #include <arpa/inet.h> const char *inet_ntop(int af, const void *src,char *dst, socklen_t size ...

最新文章

  1. FastJson解析
  2. cstring判断包含字符串_Python字符串方法之-解决判断问题
  3. LocalDateTime与LocalDate之间的相互转换
  4. ajax json 403,解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式
  5. Apache日志配置详解(rotatelogs LogFormat)
  6. 你向 MySQL 插入 100万 条数据用了多久?
  7. Java编写简易的代码生成器
  8. sw修改器初始化服务器错误,solidworks打开出现Loadlibrary failed with error 1114:动态链接库(DLL)初始化例程失败如何解决?...
  9. 手机软件测试linux,手机终端软件测试浅析
  10. MindSpore布道师招募计划,开启AI的信仰之跃
  11. php上传文件失败解决方案
  12. 201771010101 白玛次仁
  13. 他写代码如入定,人称阿里“扫地僧,java自学教程百度云
  14. 高效工具-局域网服务器访问公网
  15. 小白最优化学习(四) 算法学习 不精确一维搜索方法
  16. 【vcpkg】vcpkg:用于 Windows、Linux 和 macOS 的 C++ 包管理器
  17. 揭开中国人使用计算机互联网的序幕的人,_____发出了中国第一封电子邮件,从此揭开了中国人使用Internet的.._简答题试题答案...
  18. windows11 22H2资源管理器开启多标签页
  19. java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw
  20. MySQL Notes for Professionals-Stack Overflow出品

热门文章

  1. hdu 5182 PM2.5
  2. cuda nvprof 输出结果的理解和优化空间
  3. javascript里的post和get有什么区别
  4. gSoap的“error LNK2001: 无法解析的外部符号 _namespaces”解决方法
  5. TCP/IP 7.2 OSPF 虚链路
  6. 将SQL Server中所有表的列信息显示出来
  7. 算法与数据结构(一)
  8. 真给力!蚂蚁金服工程师总结的400道前端面试题提供下载
  9. python django设置中文及时区
  10. HDFS常用端口及参数释义