android-hexString.toInt(32)NumberFormatException

android-hexString.toInt(32)NumberFormatException,第1张

概述我有一个32位十六进制值,我希望将其转换为整数.给定十六进制字符串C71C5E00,以下方法都提供以下错误:java.lang.NumberFormatException:Forinputstring:“C71C5E00”"C71C5E00".toInt(32)Integer.valueOf("C71C5E00",32)Kotlindocs声明Int表示一个32位有符号整数,因

我有一个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,所以请原谅我的无知.

解决方法:

首先,您似乎误解了基数,它是valueOf和parseInt中的第二个参数,并且是扩展函数toInt的唯一参数.它不代表目标数字类型中的位,而是告诉方法如何转换字符串.请注意,还有第二个问题,我稍后会再讲.

基数是基础编号系统的基数.默认情况下为10(0参数toInt()方法.toInt()调用parseInt,如下所示:

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

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

但是,就像我提到的,还有第二个问题.它仍然会崩溃,因为无法解析该值.结果数为3340525056,该值大于最大int值2147483647.

这意味着您不能使用任何int方法;您将需要使用Long.

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

val x = "C71C5E00".tolong(16)

同样,基数是要使用的数字系统,而不是结果数字中的位数.如果是这样,则需要长时间使用64.

总结

以上是内存溢出为你收集整理的android-hexString.toInt(32)NumberFormatException全部内容,希望文章能够帮你解决android-hexString.toInt(32)NumberFormatException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1210123.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存