
我有一个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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)