32位十六进制浮点数转换为十进制浮点数的方法
---------------------------------------------
-- 时间: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位十六进制浮点数转换为十进制浮点数的方法相关推荐
- 将IP地址转换为整数--将32位的二进制转换为十进制
object Test01_IP地址计算 {def main(args: Array[String]): Unit = {val ip:String = "1.0.3.255"va ...
- 十六进制字符串转换为十进制
十进制字符串转换为十进制数 char *str = "123"; int n = atoi(str); printf("%d\n", n);//输出:123 十 ...
- 十六进制的转换为十进制两种常见方法
十六进制的转换为十进制两种常见方法 好久以前学的都忘了,正好复习一下 对于十六进制转十进制 第一种:快速法(自己挺喜欢第一种的快捷) 比如: 012A=0 X 163 + 1 X 162+ 2 X 1 ...
- 二进制转换为十进制的简便方法
二进制转换为十进制的简便方法. 原来方法: 从最后一位开始算,依次列为第0.1.2...位 第n位的数(0或1)乘以2的n次方 得到的结果相加就是答案 例如: 01101011转十进制: 第0位:1乘 ...
- java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...
- IEEE-754标准(32位) 十六进制转换十进制浮点数
因实验需要,读取陀螺仪的数据是16进制的数据,需要将该数据转化为10进制方便自己查看,理解.记录如下: 1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. f ...
- 将IEEE制浮点数转换为十进制
题目: 按4字节浮点数格式用0和1组成的字符串从键盘输入,转换为十进制数显示.例:输入0 1000 0100 1100 1100 1000 1111 0101 110,显示57.57. 作业碰到了这题 ...
- 8位十六进制转换32位十六进制_网络中的数制系统--二进制十六进制与十进制之间的相互转换...
网络中计算机的32位IPv4地址以二进制显示,也会以点分十进制显示.而IPv6的地址是128位,是由数字和A-F组成的十六进制系统.因此,了解并且学会在其三者之间相互转换是非常重要的,让我们能够更好的 ...
- Linux网络编程笔记 - 05 地址转换函数 32位整数,转换为点分十进制
#include <arpa/inet.h> const char *inet_ntop(int af, const void *src,char *dst, socklen_t size ...
最新文章
- FastJson解析
- cstring判断包含字符串_Python字符串方法之-解决判断问题
- LocalDateTime与LocalDate之间的相互转换
- ajax json 403,解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式
- Apache日志配置详解(rotatelogs LogFormat)
- 你向 MySQL 插入 100万 条数据用了多久?
- Java编写简易的代码生成器
- sw修改器初始化服务器错误,solidworks打开出现Loadlibrary failed with error 1114:动态链接库(DLL)初始化例程失败如何解决?...
- 手机软件测试linux,手机终端软件测试浅析
- MindSpore布道师招募计划,开启AI的信仰之跃
- php上传文件失败解决方案
- 201771010101 白玛次仁
- 他写代码如入定,人称阿里“扫地僧,java自学教程百度云
- 高效工具-局域网服务器访问公网
- 小白最优化学习(四) 算法学习 不精确一维搜索方法
- 【vcpkg】vcpkg:用于 Windows、Linux 和 macOS 的 C++ 包管理器
- 揭开中国人使用计算机互联网的序幕的人,_____发出了中国第一封电子邮件,从此揭开了中国人使用Internet的.._简答题试题答案...
- windows11 22H2资源管理器开启多标签页
- java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw
- MySQL Notes for Professionals-Stack Overflow出品