【问题标题】:convert hexadecimal number string to double-precision number in java在java中将十六进制数字字符串转换为双精度数字
【发布时间】:2012-05-22 19:02:02
【问题描述】:

我们如何在java中将十六进制数字字符串转换为双精度数字?

在matlab中很简单:

>> hex2num('c0399999a0000000')

ans =

  -25.6000

但是我也可以在 java 中做同样的事情吗?

我试过 parseInt() 但这个数字不是整数。

【问题讨论】:

    标签: java numbers hex


    【解决方案1】:

    我想你想要Double.longBitsToDouble,像这样:

    public class Test {
        public static void main(String[] args) {
            String hex = "c0399999a0000000";
            long longHex = parseUnsignedHex(hex);
            double d = Double.longBitsToDouble(longHex);
            System.out.println(d);
        }
    
        public static long parseUnsignedHex(String text) {
            if (text.length() == 16) {
                return (parseUnsignedHex(text.substring(0, 1)) << 60)
                        | parseUnsignedHex(text.substring(1));
            }
            return Long.parseLong(text, 16);
        }
    }
    

    long 是用 Java 签名的事实让这比你真正想要的更尴尬,但是嘿......)

    【讨论】:

    • 它不工作! - 刚刚在我的 Android 应用中尝试过。
    • @Daniel:“它不起作用”并没有向我们提供任何关于确切您正在尝试什么或确切出了什么问题的信息。我建议您提出一个新问题,在一个简短但完整的示例中显示您的代码,链接到该问题,并解释您所看到的与您期望看到的。
    • 对不起我的不成熟行为,这是你建议的我的问题的链接。 stackoverflow.com/q/55295966/10773894
    【解决方案2】:

    先做一个long,然后调用longBitsToDouble

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多