【问题标题】:Convert.ToInt64 equivalent in javajava中的Convert.ToInt64等价物
【发布时间】:2018-12-10 09:33:18
【问题描述】:

我在 c# 中尝试以下代码,结果如下:

long dec1 = Convert.ToInt64("B62FD56EFD5B375D", 16);

结果:-531879796222753398

我正在尝试在 java 中执行此操作,但我总是得到NumberFormatException,因为字符串中有字母数字。我在java中的代码是:

Long.parseLong("B62FD56EFD5B375D", 16);

我可以知道在java中这个等价物是什么吗?

【问题讨论】:

  • 请展示您在 Java 中尝试过的内容。我希望Long.parseLong(text, 16) 没问题。
  • @JonSkeet,是的,我正在使用这种方式,但点击NumberFormatException
  • long result = Long.parseUnsignedLong("B62FD56EFD5B375D", 16); 在 java 和 .net 中应该给你相同的结果。顺便说一句,您在帖子中显示的结果似乎不是我在执行代码时在 JetBrains Rider 上得到的结果。对于 java 和 c#,我得到了 -5318797962227533987
  • @Aomine,你可以发帖,我会标记为我的答案。谢谢。
  • @PanadolChong 当然可以,我猜。

标签: java c# parsing long-integer typeconverter


【解决方案1】:

您可以在 Java 中使用 Long.parseUnsignedLong 来获得相同的结果。

long result = Long.parseUnsignedLong("B62FD56EFD5B375D", 16);

【讨论】:

    【解决方案2】:

    长值的最大值为9,223,372,036,854,775,807(含)。解析出B62FD56EFD5B375D的值是13,127,946,111,482,018,682,无法保持长值。

    所以改为使用 BigInteger。

    【讨论】:

      【解决方案3】:
      long dec1 = new BigInteger("B62FD56EFD5B375D", 16).longValue();
      

      【讨论】:

        【解决方案4】:

        你可以试试 BigInteger

        BigInteger value = new BigInteger(hex, 16);
        

        【讨论】:

          猜你喜欢
          • 2019-11-03
          • 2016-07-16
          • 2011-10-06
          • 2010-09-08
          • 2012-05-09
          • 2023-03-04
          • 1970-01-01
          • 2012-06-03
          • 2013-01-15
          相关资源
          最近更新 更多