社区
C++ 语言
帖子详情
破解中遇到的问题,数据转换 00 00 00 40 == 2 ?
wang1st
2009-08-12 12:49:40
00 40 == 2
08 40 == 3
0C 40 == 3.5
14 40 == 5
18 40 == 6
22 40 == 9
24 40 == 10
各位,前面是HEX,后面是10进制。这到底是如何转换的啊?
...全文
299
20
打赏
收藏
破解中遇到的问题,数据转换 00 00 00 40 == 2 ?
00 40 == 2 08 40 == 3 0C 40 == 3.5 14 40 == 5 18 40 == 6 22 40 == 9 24 40 == 10 各位,前面是HEX,后面是10进制。这到底是如何转换的啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zyq1600356618
2009-08-12
打赏
举报
回复
先顶下
liuchangyu23
2009-08-12
打赏
举报
回复
IEEE754浮点数转换格式表示法
算法很简单,以 5 举例
0100 0000 1010 0000 0000 0000 0000 0000
bit31: 例如0,表示正数
bit30-23: 例如1000 0001: 129-127(固定算法)=
2
bit22-0: 例如010 0000 0000 0000 0000 0000 在这之前加上1.变成如下
1.010 0000 0000 0000 0000 转换成十进制为1.2500000
所以这32位代表的十进制数为 2(基数)的
2
次方×1.2500000 = 5
其它的以此类推。
wang1st
2009-08-12
打赏
举报
回复
[Quote=引用 18 楼 hpsmouse 的回复:]
引用 17 楼 wang1st 的回复:
是的啊 。这个是什么标准啊。还是软件开发者故意这样整的?
有人能说说吗?有人碰到过这样表示法的浮点数吗?
IEEE似乎没有这个标准,很明显他把指数变长了,尾数缩短了,应该是为了扩大表示范围吧。不过这样恐怕真的没有多少硬件支持了,要么用软件模拟,要么用专用硬件。不知你在哪里碰到的?
[/Quote]
这是我分析国外一个财务管理软件的数据格式时碰到的。
鼠
2009-08-12
打赏
举报
回复
[Quote=引用 17 楼 wang1st 的回复:]
是的啊 。这个是什么标准啊。还是软件开发者故意这样整的?
有人能说说吗?有人碰到过这样表示法的浮点数吗?
[/Quote]
IEEE似乎没有这个标准,很明显他把指数变长了,尾数缩短了,应该是为了扩大表示范围吧。不过这样恐怕真的没有多少硬件支持了,要么用软件模拟,要么用专用硬件。不知你在哪里碰到的?
wang1st
2009-08-12
打赏
举报
回复
是的啊 。这个是什么标准啊。还是软件开发者故意这样整的?
有人能说说吗?有人碰到过这样表示法的浮点数吗?
xingzhe2001
2009-08-12
打赏
举报
回复
看来前边多了3个bit
wang1st
2009-08-12
打赏
举报
回复
0100 0000 0000 0000 0000 0000 0000 0000 == 2
0100 0000 0000 0000 0000 0000 0000 0000
0100 0000 0000 1000 0000 0000 0000 0000 == 3
0100 0000 0100 0000 0000 0000 0000 0000
0100 0000 0000 1100 0000 0000 0000 0000 == 3.5
0100 0000 0110 0000 0000 0000 0000 0000
0100 0000 0001 0100 0000 0000 0000 0000 == 5
0100 0000 1010 0000 0000 0000 0000 0000
0100 0000 0001 1000 0000 0000 0000 0000 == 6
0100 0000 1100 0000 0000 0000 0000 0000
0100 0000 0010 0010 0000 0000 0000 0000 == 9
0100 0001 0001 0000 0000 0000 0000 0000
0100 0000 0010 0100 0000 0000 0000 0000 == 10
0100 0001 0010 0000 0000 0000 0000 0000
红色是IEEE的浮点数表示法,这样一看,基本就明白了。呵呵
xingzhe2001
2009-08-12
打赏
举报
回复
00 00 00 40 == 0
00 00 08 40 == 2
00 00 0C 40 == 3
00 00 14 40 == 5
00 00 18 40 == 6
00 00 22 40 == 9
00 00 24 40 == 10
感觉这样才对阿,右边的数是怎么得来的?
xingzhe2001
2009-08-12
打赏
举报
回复
转自
http://blog.csdn.net/gates84/archive/2006/11/01/1360332.aspx
1、简介
目前已知的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE浮点数表示法来进行运算的。
这种结构是一种科学表示法,用符号(+或-)、指数和尾数来表示,底数被确定为2。
所以在IEEE浮点数表示法里,一个浮点数为尾数乘以2的指数次方再加上符号。
2、float规格
float 共计32位,4字节
由最高到最低位分别是第31、30、29、……、0位,则:
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
3、转换例子
按照IEEE浮点数表示法,将float型浮点数12345.0f转换为二进制。
处理不带小数的浮点数时,直接将整数部转化为二进制表示:1 11100010 01000000 也可以这样表示:11110001001000000.0
然后将小数点向左移,一直移到离最高位只有1位:1.11100010010000000 共左移了16位,
所以原数就等于:1.11100010010000000 * ( 2^16 )。可知尾数为1.11100010010000000,指数为16。
显而易见,最高位永远是1,所以这个1没有必要保留。
这样尾数的二进制就变成了:11100010010000000
最后在尾数的后面补0,一直到补够23位:11100010010000000000000
来看指数,一共8位,可以表示范围是0 - 255的无符号整数,也可以表示-128 - 127的有符号整数。
因为指数是可以为负的,为了统一把十进制的整数化为二进制时,都先加上127。
这里,我们的16加上127后就变成了143,二进制表示为:10001111
12345.0f这个数是正的,所以符号位是0,那么我们按照前面讲的格式把它拼起来:
0 10001111 11100010010000000000000
符号 指数 尾数
即:01000111 11110001 00100000 00000000
wang1st
2009-08-12
打赏
举报
回复
0100 0000 0000 0000 0000 0000 0000 0000 == 2
0100 0000 0000 1000 0000 0000 0000 0000 == 3
0100 0000 0000 1100 0000 0000 0000 0000 == 3.5
0100 0000 0001 0100 0000 0000 0000 0000 == 5
0100 0000 0001 1000 0000 0000 0000 0000 == 6
0100 0000 0010 0010 0000 0000 0000 0000 == 9
0100 0000 0010 0100 0000 0000 0000 0000 == 10
wang1st
2009-08-12
打赏
举报
回复
重新整理一下
00 00 00 40 == 2
00 00 08 40 == 3
00 00 0C 40 == 3.5
00 00 14 40 == 5
00 00 18 40 == 6
00 00 22 40 == 9
00 00 24 40 == 10
wang1st
2009-08-12
打赏
举报
回复
[Quote=引用 8 楼 hpsmouse 的回复:]
IEEE 浮点最少也是 32bit,更短的浮点不论是从精度上还是实现上都有难度(毕竟少有硬件支持)。
楼主在标题中写的是 32bit,帖子里又是 16bit,很乱……
麻烦楼主把数据写清楚,而且注明一下字节序(应该是 little-endian 吧)。
[/Quote]
各位抱歉。是32位的。只是我偷懒,只写了16位。
顺序是little-endian 的。
AbnormalSubmarine
2009-08-12
打赏
举报
回复
如果不是楼主写错,就是浮点转换的问题了。
鼠
2009-08-12
打赏
举报
回复
IEEE 浮点最少也是 32bit,更短的浮点不论是从精度上还是实现上都有难度(毕竟少有硬件支持)。
楼主在标题中写的是 32bit,帖子里又是 16bit,很乱……
麻烦楼主把数据写清楚,而且注明一下字节序(应该是 little-endian 吧)。
xingzhe2001
2009-08-12
打赏
举报
回复
16位的浮点?
wang1st
2009-08-12
打赏
举报
回复
我也感觉是某种浮点数,但是就是不清楚如何转换的。
ayw215
2009-08-12
打赏
举报
回复
这个貌似是浮点的二进制。。。
去找找ieee的浮点数的标准看看
wanghao111
2009-08-12
打赏
举报
回复
关注
luc_cj
2009-08-12
打赏
举报
回复
楼上说的有道理,但是着实看不出它到底是怎么转的呢
FancyMouse
2009-08-12
打赏
举报
回复
第1个字节高4位是0的时候步进1/8,1的时候步进1/4,2的时候步进1/2
这似乎是某种浮点
数字多道脉冲幅度分析器V2.0升级版
数字多道脉冲幅度分析器V2.0升级版
HappyChenIcy-Jenkins-28508-1756660727132.zip
stm32HappyChenIcy_Jenkins_28508_1756660727132.zip
轻松将 Segment 分析功能添加到 Flutter 应用程序的方法
【源码预览】:https://renmaiwang.cn/s/v5665 能够毫不费力地把 Segment 分析功能添加到 Flutter 应用程序里面。
旧型柱形图转为js图十五
Webji-381.html
microservice-core_2.13-0.5.1.jar
microservice-core_2.13-0.5.1.jar
C++ 语言
65,198
社区成员
250,522
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章