Kotlin NumberFormatException

时间:2017-11-23 10:14:17

标签: kotlin

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

official docs开始,Long“代表64位签名整数”

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

2 个答案:

答案 0 :(得分:1)

这里的问题是,如果你没有在Kotlin文字之前明确地添加-符号,那么总是假定文字代表一个正数。所以这里0xB23C77126DD924BF不是根据它的二进制补码表示来解释的,如果你认为它是一个64有符号整数,它会给你-5603472915319675713。它被解释为12843271158389875903,它超出了Long支持的范围。

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

答案 1 :(得分:0)

它的工作。使用BigInteger

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