首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用valueOf()方法转换为十六进制格式

问使用valueOf()方法转换为十六进制格式
EN

Stack Overflow用户
提问于 2015-01-20 23:46:54
回答 3查看 440关注 0票数 2

我有一个变量类型int,并且我必须指定负数:-2147483648,问题是我试图使用valueOf()方法将其转换为十六进制形式,当我尝试这样做时:

Integer.valueOf(String.valueOf(n),16); n是负数

它抛出了异常java.lang.NumberFormatException:对于输入字符串:-214748....

为什么我会得到这个??

EN

回答 3

Stack Overflow用户

发布于 2015-01-20 23:49:32

请改用Integer.toString(n, 16)获取n的十六进制表示形式。

票数 3
EN

Stack Overflow用户

发布于 2015-01-20 23:53:57

对问题的简短解释。问题是,使用

代码语言:javascript
复制
Integer.valueOf(String.valueOf(n),16);

假设-2147483648是一个十六进制形式的整数(您正在解析以16为底的-2147483648 ),并且它比Interger.MIN_VALUE小得多,所以它会导致异常。正如@Jean建议的那样,使用Integer.toString(int i, radix)。

来自文档:

如果发生以下情况之一,将抛出NumberFormatException类型的异常:

字符串表示的INT值不是

  • ...
  • The类型的值。
票数 2
EN

Stack Overflow用户

发布于 2015-01-21 00:11:18

  • 字符串参数(基数16) > Integer.MAX_VALUE (基数2),或者
  • 字符串参数(基数16) < Integer.MIN_VALUE (基数2)

检查这些约束正是Integer.parseInt(String, int)为您做的事情。如果检查Integer.parseInt(String, int)的源代码,就会注意到这段代码抛出了异常:

代码语言:javascript
复制
if (result < multmin) {
    throw NumberFormatException.forInputString(s);
}

其中,result是从字符串的开头到结尾的解析过程中的中间结果,multmin是Integer.MAX_VALUE / radix或-Integer.MAX_VALUE / radix。

解析正在进行中,并检测到如果至少还有一个额外的字符要处理,则必须违反其中一个约束。这就是抛出异常的地方:它指示您向此方法提供了一个无法接受的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28049512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档