【数据采集】将16进制字符串转化为Double类型输出(依照IEEE754标准)

因为需要读取二进制文件中包含的数据,故需要这样一个转化过程。

鄙人功力太浅,主要参照http://www.cnblogs.com/xinjun/archive/2010/07/28/1787297.html,略有改动,以保证编译运行通过。

  1 #include <iostream>
2 #include <bitset>
3 #include <cmath>
4 #include <stdio.h>
5 #include <string>
6
7 usingnamespace std;
8
9 string charToBin(char temp);//十六进制转二进制串
10 int stringToDouble(string temp);//二进制串到double(整数)--求阶码
11 double BenToDex(string temp);//二进制串到double(小数)
12 double HexToDouble(string temp);//十六进制字符串到double类型
13
14 int main()
15 {
16 double a=HexToDouble("40AD5807C0000000");
17 cout<<a;
18 cin.get();
19
20 return0;
21 }
22
23 double HexToDouble(string temp)
24 {
25 string S_Bin="";//转化后的二进制字符串
26 for (int i=0;i<temp.length();i++)
27 {
28 char temp1=temp.at(i);
29 S_Bin=S_Bin+charToBin(temp1);
30 }
31
32 int sign=0;//符号位(1位)
33 if (S_Bin.at(0)=='1')
34 {
35 sign=1;
36 }
37
38 string exponent="";//获取阶码字符串(11位)
39 for (int i=1;i<12;i++)
40 {
41 if (S_Bin.at(i)=='1')
42 exponent=exponent+'1';
43 else
44 exponent=exponent+'0';
45 }
46
47 int exponent_double=0;//阶码
48 exponent_double=stringToDouble(exponent);
49 exponent_double=exponent_double-1023;//减去偏移值
50
51
52 string mantissa_temp="";//获取尾数字符串(52位)
53 for (int i=12;i<64;i++)
54 {
55 if (S_Bin.at(i)=='1')
56 mantissa_temp=mantissa_temp+'1';
57 else
58 mantissa_temp=mantissa_temp+'0';
59 }
60
61 double mantissa=0;//尾数
62 mantissa=BenToDex(mantissa_temp);
63 mantissa=mantissa+1.0;
64
65 //双精度公式:
66 // F=1.M(二进制)
67 // V=(-1)^s*2^(E-1023)*F
68 double res=0;
69 double a,c;
70 a=pow((-1.0),sign);
71 c=pow(2.0,exponent_double);
72 res=a*c*mantissa;
73
74 return res;
75 }
76
77 string charToBin(char temp)//十六进制转二进制串
78 {
79 switch (temp)
80 {
81 case'0':
82 return"0000";
83 break;
84 case'1':
85 return"0001";
86 break;
87 case'2':
88 return"0010";
89 break;
90 case'3':
91 return"0011";
92 break;
93 case'4':
94 return"0100";
95 break;
96 case'5':
97 return"0101";
98 break;
99 case'6':
100 return"0110";
101 break;
102 case'7':
103 return"0111";
104 break;
105 case'8':
106 return"1000";
107 break;
108 case'9':
109 return"1001";
110 break;
111 case'A':
112 case'a':
113 return"1010";
114 break;
115 case'B':
116 case'b':
117 return"1011";
118 break;
119 case'C':
120 case'c':
121 return"1100";
122 break;
123 case'D':
124 case'd':
125 return"1101";
126 break;
127 case'E':
128 case'e':
129 return"1110";
130 break;
131 case'F':
132 case'f':
133 return"1111";
134 break;
135 default:
136 return"WRONG!";
137 }
138 }
139
140 int stringToDouble(string temp)//二进制串到double(整数)
141 {
142 int res=0;
143 for(int i=0;i<temp.length();i++)
144 {
145 res=res*2+(temp[i]-'0');
146 }
147 return res;
148 }
149
150 double BenToDex(string temp)//二进制串到double(小数)
151 {
152 int m=temp.length();
153 double res=0;
154 for (int i=0;i<m;i++)
155 {
156 res=res+(temp[i]-'0')*pow(2.0,-i-1);
157 }
158 return res;
159 }

  

转载于:https://www.cnblogs.com/pezy/archive/2011/08/30/Hex2Double.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TED演讲 | 2100年,神经学家如何研究人类大脑?

“本文来源于药明康德微信公众号&#xff08;ID&#xff1a;WuXiAppTecChina&#xff09;”除非我们弄清楚如何在健康人体中获得神经元的电活动&#xff0c;否则不会在理解人类大脑或疾病方面取得任何进展。 Were not going to make any progress towards understanding the hu…

安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )

From&#xff1a;Hook 神器家族的 Frida 工具使用详解&#xff1a;https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida ( 信抢红包 )&#xff1a;https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】…

VC 创建NT服务程序

VC 创建NT服务程序 #include "Windows.h" #include "Winsvc.h" #include "time.h" #include "stdio.h" SERVICE_STATUS m_ServiceStatus; SERVICE_STATUS_HANDLE m_ServiceStatusHandle; BOOL bRunningtrue; void WINAPI Servi…

安卓逆向_22( 二 ) --- Xposed 学习记录

转载&#xff1a;看雪论坛 堂前燕&#xff1a;https://bbs.pediy.com/thread-252153.htm Xposed 模块编写的那些事&#xff1a;https://www.freebuf.com/articles/terminal/114910.html 看了很多 xposed的教程&#xff0c;自以为掌握了个大概&#xff0c;直到今天整理&#xf…

最前线丨新零售结果、AT暗战,今年的618都讲了哪些故事

来源&#xff1a;36Kr今年的618成了巨头们验收新零售成果的好时机。618源于2010年&#xff0c;最初为京东店庆。2013年天猫加入618大促&#xff0c;苏宁、国美紧随其后。此后&#xff0c;618成为电商价格战的战场&#xff0c;也成为全网狂欢的节日。618今年已经走到底第9个年头…

什么是RUP

一、RUP产生的背景 UML能够用来为系统进行面向对象建模&#xff0c;但是并没有指定应用UML的过程&#xff0c;它仅仅是一种语言&#xff0c;它是独立于任何过程的。如果想要成功的应用UML一个好的过程是必要的。合理的过程能够有效的测度工作进度&#xff0c;控制和改善工作效率…

安卓逆向_24 ( 二 ) --- frida 学习记录

转载&#xff1a;看雪论坛 堂前燕 &#xff1a;https://bbs.pediy.com/thread-252319.htm apk 和 Python脚本 链接&#xff1a;https://pan.baidu.com/s/1KX1fY16NgaYB1FnCrpu0lQ 提取码&#xff1a;t38k 上次记录了下xposed hook java层的学习&#xff0c;这次记录下frid…

动态 | DeepMind 首次披露旗下专利申请情况

来源&#xff1a;AI科技评论摘要&#xff1a;作为一家顶尖的人工智能研究公司&#xff0c;DeepMind 近年来申请了一堆国际专利&#xff0c;但是具体到专利内容和申请数量就不得而知了。近日&#xff0c;DeepMind首次披露了一系列国际专利&#xff0c;这些专利涉及了现代机器学习…

JavaScript获取URL参数

文件1&#xff1a;realwall.js (function(window){var urltool {getUrlParameterByKey : function(url,key){var result "",start,parameterStr,len,paras,i;parameterStr url.split("?");if(parameterStr.length > 1){parameterStr parameterStr[…

Frida Android hook

From&#xff1a;https://eternalsakura13.com/2020/07/04/frida/ 开发环境配置 ( IDE 智能提示 frida )&#xff1a; 下载 nodejs&#xff1a; https://nodejs.org/zh-cn/download/npm install types/frida-gum 见过的较好的frida笔记&#xff1a; https://kevinspider.gith…

寒武纪宣布完成B轮融资 整体估值达25亿美元

来源&#xff1a;网易智能摘要&#xff1a;6月20日&#xff0c;芯片领域公司寒武纪宣布完成数亿美元的B轮融资&#xff0c;由中国国有资本风险投资基金、国新启迪、国投创业、国新资本联合领投。中金资本、中信证券投资&金石投资、TCL资本、中科院科技成果转化基金跟投。原…

安卓模拟器 Genymotion 安装

Form&#xff1a;https://www.runoob.com/w3cnote/android-tutorial-genymotion-install.html Linux (Ubuntu) 下的 Android 模拟器&#xff1a;Genymotion&#xff1a;https://blog.csdn.net/qq_25978793/article/details/49923579 Android 模拟器 Genymotion 安装使用教程详解…

辩论届人机大战:IBM新AI完胜人类冠军!

来源&#xff1a;智东西导语&#xff1a;6月18日&#xff0c;IBM的AI系统Project Debater首次与人类进行现场公开辩论。Project Debater能够理解对方观点&#xff0c;并有针对性地做出清晰的反驳&#xff0c;最终成功战胜人类辩手。6月19日消息&#xff0c;美国时间6月18日&…

没有人能阻止程序员将电脑上的一切搬到网页上

操作系统模拟&#xff08;OS Simulator&#xff09; Web QQ Q版的界面&#xff0c;看起来大体上是模拟Mac OS而不是Windows&#xff0c;不过那些桌面Widget又是Windows的展品。也算是取各家所长。使用他的唯一理由可能就是在没有QQ的电脑上用QQ吧 Windows 3.1 Windows 95(感谢大…

一篇文章带你领悟 Frida 的精髓(基于安卓8.1)

转载&#xff08;一篇文章带你领悟Frida的精髓&#xff08;基于安卓8.1&#xff09;&#xff09;&#xff1a;https://www.freebuf.com/articles/system/190565.html 《Frida操作手册》&#xff1a;https://github.com/hookmaster/frida-all-in-one Frida github 地址&#x…

神经元之间是如何形成“社交网络”的

来源&#xff1a;中科院神经科学研究院摘要&#xff1a;我们的大脑中存在着亿万个神经元&#xff0c;在神经科学领域有一个非常重要的问题&#xff0c;就是一个神经元是如何在这亿万个神经元中选择与某一些神经元形成突触联系的。演讲者&#xff1a;中国科学院神经科学研究所徐…

WinForm 图片变灰方法

最近公司项目用到文件树&#xff0c;对于工程文件中不存在的文件&#xff0c;要给予灰色显示&#xff0c;如何让图片成灰色&#xff0c;在网上找了个效率较高的方法&#xff0c;很方便调用&#xff0c;故记录。 1 public Bitmap ExColorDepth(Image image) 2 { 3 …

《 FRIDA系列文章 》

转载&#xff1a;《FRIDA系列文章》github 地址&#xff1a;https://github.com/r0ysue/AndroidSecurityStudy 由 Frida 提供的很棒的 项目、库和工具的精选列表&#xff1a;https://github.com/dweinstein/awesome-frida 《Frida操作手册》&#xff1a;https://github.com/h…

毕马威:2018全球科技创新报告(附PDF下载)

来源&#xff1a;走向智能论坛摘要&#xff1a;日前&#xff0c;毕马威发布《2018全球科技创新报告》&#xff0c;报告显示&#xff0c;我们如今正处在一个科技创新爆发的时代&#xff0c;人工智能、机器人和物联网必将会影响全球的商业&#xff0c;那些不主动去抓住未来趋势的…

GWT(Google Web Tookit) Eclipse Plugin的zip下载地址(同时提供GWT Designer下载地址)

按照Eclipse Help->Install new software->....(这里是官方安装文档&#xff1a;http://code.google.com/intl/zh-CN/eclipse/docs/install-eclipse-3.6.html) 的方法安装失败&#xff0c;界面始终显示Pedding状态&#xff0c;很长时间都没反映&#xff0c;无奈之下&…