求 Java 中 16 进制 64 位双精度浮点数(如 0x405C7AEDF78A0FB9)转 10 进制浮点数(结果是 113.92077435)的方法

2017-03-14 00:15:02 +08:00
 qiayue
PHP 里我知道,直接 unpack('d1double',strrev(hex2bin('0x405C7AEDF78A0FB9')))['double'] 就可以得到结果。

但是 JAVA 里,搜索引擎找了好久,也没有找到正确的方法。

求,做过的告知,谢谢!
1277 次点击
所在节点    问与答
3 条回复
ryd994
2017-03-14 00:20:12 +08:00
1. 这和进制无关,就是单纯的二进制解读
2. Google "java unpack binary float"
大体上就是转成二进制整数然后 intBitsToFloat
qiayue
2017-03-14 00:30:10 +08:00
@ryd994 你说对了,一言点醒懵中人

String hex = "405C7AEDF78A0FB9";
long l = Long.parseLong(hex, 16);
double b = Double.longBitsToDouble(l);

我终于知道为什么网上相关资料少了,因为其他人压根不认为这是一个问题,我钻牛角尖了。
试过好多种办法,都不行,以为是一个大难题。
结果,原来如此简单。
SoloCompany
2017-03-14 02:15:29 +08:00
提醒一下,由于有符号位的问题,你可能需要 parseUnsignedLong (不幸的是,需要 java8)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX