为什么"b23c77126dd924bf".toLong(16)
会产生java.lang.NumberFormatException
??
从official docs开始,Long“代表64位签名整数”
并且0xb23c77126dd924bf
适合64位,它是十进制-5603472915319675713
答案 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