【问题标题】:Kotlin NumberFormatExceptionKotlin NumberFormatException
【发布时间】:2018-05-07 06:25:20
【问题描述】:

为什么"b23c77126dd924bf".toLong(16) 产生java.lang.NumberFormatException ??

截至official docs,Long "表示一个 64 位 有符号 整数"

0xb23c77126dd924bf适合64位,是十进制-5603472915319675713

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    这里的问题是,如果您没有在 Kotlin 文字前显式添加 - 符号,则始终假定该文字代表一个正数。所以这里 0xB23C77126DD924BF 不是根据它的二进制补码表示来解释的,如果你假设它是一个 64 位有符号整数,它会给你 -5603472915319675713。它被解释为 12843271158389875903,超出了 Long 支持的范围。

    这与Java Integer.MAX_VALUE vs Kotlin Int.MAX_VALUE 是同一个问题,但这里它与 Long 而不是 Int 有关。

    【讨论】:

      【解决方案2】:

      它的工作。使用 BigInteger

              val numb = "b23c77126dd924bf"
              val res = BigInteger(numb, 16)
              println(res)     //12843271158389875903
              println(res.toLong()) //-5603472915319675713
      

      【讨论】:

        猜你喜欢
        • 2023-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多