V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qiayue
V2EX  ›  问与答

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

  •  
  •   qiayue · 2017-03-14 00:15:02 +08:00 · 1279 次点击
    这是一个创建于 2845 天前的主题,其中的信息可能已经有所发展或是发生改变。
    PHP 里我知道,直接 unpack('d1double',strrev(hex2bin('0x405C7AEDF78A0FB9')))['double'] 就可以得到结果。

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

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

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

    我终于知道为什么网上相关资料少了,因为其他人压根不认为这是一个问题,我钻牛角尖了。
    试过好多种办法,都不行,以为是一个大难题。
    结果,原来如此简单。
    SoloCompany
        3
    SoloCompany  
       2017-03-14 02:15:29 +08:00   ❤️ 1
    提醒一下,由于有符号位的问题,你可能需要 parseUnsignedLong (不幸的是,需要 java8)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:16 · PVG 19:16 · LAX 03:16 · JFK 06:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.