某二进制文件里有一个4字节空间存储的是float类型的数据。在16进制编辑器里查看数据是 E7 45 4B 4E
在ideone.com在线php网站上用代码:
$h = "\xE7\x45\x4B\x4E";
print_r(unpack('f', $h));
可以得到正确的数值 852588992。
可是在C++里:
float b = 0xE7454B4E;
std::cout << b ;
得到的却是3.88008e+09 (与正确的数值 852588992怎么相差那么多)?
我用的是C++,我错在哪里了?
C++解码二进制float类型遇到困难
- flwwater
- 帖子: 762
- 注册时间: 2010-10-31 9:15
- 系统: kubuntu 24.04
C++解码二进制float类型遇到困难
个人收藏的数百个精美动态壁纸:
https://url17.ctfile.com/d/15983117-593 ... 768?p=6220
(访问密码:6220)
个人收藏的经典国语音乐和纯音乐(钢琴,笛子,二胡等):
https://url17.ctfile.com/d/15983117-446 ... 33e?p=6220
(访问密码:6220)
如果访问密码不对,可试试这个密码 566816
https://url17.ctfile.com/d/15983117-593 ... 768?p=6220
(访问密码:6220)
个人收藏的经典国语音乐和纯音乐(钢琴,笛子,二胡等):
https://url17.ctfile.com/d/15983117-446 ... 33e?p=6220
(访问密码:6220)
如果访问密码不对,可试试这个密码 566816
- flwwater
- 帖子: 762
- 注册时间: 2010-10-31 9:15
- 系统: kubuntu 24.04
Re: C++解码二进制float类型遇到困难
int a = 0x4E4B45E7 ;
float b = *(float*)&a;
std::cout << b;
使用强制类型转换的办法可以实现。
float b = *(float*)&a;
std::cout << b;
使用强制类型转换的办法可以实现。
个人收藏的数百个精美动态壁纸:
https://url17.ctfile.com/d/15983117-593 ... 768?p=6220
(访问密码:6220)
个人收藏的经典国语音乐和纯音乐(钢琴,笛子,二胡等):
https://url17.ctfile.com/d/15983117-446 ... 33e?p=6220
(访问密码:6220)
如果访问密码不对,可试试这个密码 566816
https://url17.ctfile.com/d/15983117-593 ... 768?p=6220
(访问密码:6220)
个人收藏的经典国语音乐和纯音乐(钢琴,笛子,二胡等):
https://url17.ctfile.com/d/15983117-446 ... 33e?p=6220
(访问密码:6220)
如果访问密码不对,可试试这个密码 566816
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
Re: C++解码二进制float类型遇到困难
参见:https://zh.wikipedia.org/zh-cn/%E5%AD%9 ... 2%E5%BA%8F
楼主应该用地址根据正确的字节顺序,逐个用字节值来赋值
Fri Dec 16 14:49:02 CST 2016补充:
侦测到马甲王
弄错了
楼主应该用地址根据正确的字节顺序,逐个用字节值来赋值
Fri Dec 16 14:49:02 CST 2016补充:
侦测到马甲王
弄错了