gpt4 book ai didi

java - hexString.toInt(32) NumberFormatException

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:38 26 4
gpt4 key购买 nike

我有一个 32 位十六进制值,我希望将其转换为整数。

给定十六进制字符串 C71C5E00,以下方法都提供以下错误:

java.lang.NumberFormatException: For input string: "C71C5E00"

"C71C5E00".toInt(32)
Integer.valueOf("C71C5E00", 32)

Kotlin docs声明一个 Int 代表一个 32 位有符号整数,所以并不是说这个值太大而不能打包成一个 Int。我试过在字符串前添加 0x,但没有成功。

编辑:根据this我尝试过的问题:

java.lang.Integer.parseInt("C71C5E00", 32)

不幸的是,我仍然收到同样的错误。

我不常接触 Android 或 Kotlin,请原谅我的无知。

最佳答案

首先,你好像误解了基数,它是valueOfparseInt中的第二个参数,也是扩展函数toInt的唯一参数。它不代表目标数字类型中的位,它告诉方法如何通过通知它 base 是什么来转换您的字符串。它正在运行。请注意,还有第二个问题,我稍后再谈。

基数是基础数字系统的基数。默认情况下它是 10(0-arg toInt() 方法。toInt() 调用 parseInt,如下所示:

public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}

如您所见,它使用 radix = 10。同样,数字类型的位在这里不相关。 Wikipedia很好地涵盖了它,并且 Java 或多或少遵循相同的系统。如您所见,16 对应于十六进制。所以这里使用的适当基数是 16。

但是,正如我提到的,还有第二个问题。它仍然会崩溃,因为无法解析该值。生成的数字是 3340525056,大于 max int 值 2147483647。

这意味着,您不能使用任何 int 方法;你需要使用 Long 的。

因此,对于您的情况,这很好:

val x = "C71C5E00".toLong(16)

同样,基数是要使用的数字系统,而不是结果数字中的位数。如果是,则需要使用 64 来表示多头。

好处:整数和长整数有预先确定的位数。通过使用 toInt(),您已经在隐式请求 32 位。对于 Long,您请求的是 64 位。

关于java - hexString.toInt(32) NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52630490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com