社区
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进制。这到底是如何转换的啊?
...全文
249
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写文章
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
这似乎是某种浮点
vue
中
将json
数据
转换
自己想要的对象
数据
======网易云音乐api的json
转换
成自定义的对象
补充:看另外一篇博客解决需要多次请求获得的
数据
进行重新构造新的对象: ...
遇到
的
问题
:后台给的
数据
类型不符合自己的使用需求,想通过前台
转换
成自己想要的
数据
对象 在这过程
中
,犯了一个错误。如下...
TIMESTAMP类型‘
00
00
-
00
-
00
00
:
00
:
00
’值
转换
报错
问题
当然我没有设置,那么导致出现了这样一个的
问题
,就是我在插入记录的时候,由于没有指定默认值,MySQL会给TIMESTAMP类型字段默认一个‘
00
00
-
00
-
00
00
:
00
:
00
’,然后在通过JDBC
转换
成java.sql.Timestamp的时候报了...
谈谈ETL
中
的
数据
质量
当我们把
数据
导入
数据
仓库时,ETL
中
的每个步骤
中
都可能会
遇到
数据
质量错误。比如与源系统的连接错误,抽取
数据
可能会失败。由于记录类型冲突,
数据
转换
可能会失败。即使的ETL任务成功,提取的记录
中
也会出现异常值,...
C++之
数据
类型
转换
(全)
当我们用C++编写代码时,经常会
遇到
数据
类型的
转换
,如string,char*,char[],const char*、Qstring以及int,float等...在
数据
转换
中
,尤其是字符串
转换
是最常用的,所以我们以字符串来作为整个
数据
类型
转换
的核心。
矢量
数据
向栅格
数据
的
转换
了解下矢量,方便以后用GDAL进行转 5.4 矢量
数据
向栅格
数据
的
转换
... 矢量
数据
向栅格
数据
转换
时,首先必须确定栅格元素的大小...如把某一地区的矢量
数据
结构的地形图向栅格
数据
转换
时,必须考虑地形的起伏变化,
C++ 语言
64,639
社区成员
250,578
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章