【问题标题】:Integer.valueOf() invalid intInteger.valueOf() 无效整数
【发布时间】:2012-11-23 23:38:23
【问题描述】:

我正在尝试从 r、g、b 值创建颜色值,并添加 alpha 字节以创建颜色 int。

但我在使用时遇到错误:

Integer.valueOf(colorStr,16);

colorStr 是我构建的字符串,现在向我发送错误的值是 "0XFF2f6b55" 它向我发送了无效的 int。

【问题讨论】:

  • 对 int 来说太大了吗?
  • @HovercraftFullOfEels 这是一个有符号整数。
  • @HovercraftFullOfEels 呃……我就是这么说的。 OP 的字符串 对于带符号的 int 来说太大
  • 好的,我们在同一页面上。对不起,我的误会。
  • -1 表示未发布确切的异常名称/消息。请养成包含 exact 错误指示符的习惯。 (事实上​​,我敢打赌,如果您 搜索 所述错误消息..)

标签: java integer value-of


【解决方案1】:

Java 的 integer 涵盖从 -2^31 到 2^31-1 (2147483647) 的值。您的值是十进制的 (4281297749),这对于 java 的整数来说太大了。

Java 的long 涵盖了-2^63 到2^63-1 的更高范围。其中包括您的价值,因此建议使用 Long.valueOf(colorStr, 16) 并切换到使用 longs。 (当您使用的值超出整数值范围时,建议发挥作用)。

在我看来你是知道的,但万一你不知道;如果0x 是字符串值的一部分,则应将其删除,因为如果留在其中,它将给出无效的格式异常。

【讨论】:

  • @Nomin .. 是的,这行得通。但是 OP 的 colorStr 包含:-0xFF2f6b55,这就是我说它不起作用的原因。 Ox 不需要。
  • @RohitJain 啊,他说“值”是0xFF2f6b55,因为他暗示他使用的其他值有效,我假设他知道0x 是多余的。我将编辑我的答案以反映假设。
【解决方案2】:

您的字符串对于带符号的 int 来说太大了 - 它们从 -0x80000000 变为 0x7FFFFFFF。试试:

int i = (int) Long.parseLong(colorStr.substring(2), 16);

这将导致一个否定的int,这可能不是您想要的。 (使用颜色时,使用红色、绿色、蓝色和 alpha 分量的值元组可能更方便。)

valueOf()parseInt()/parseLong() 都不会识别 0x 前缀,你需要去掉它。

【讨论】:

  • 不是我的反对意见,而是编译器错误。无法从 Long 转换为 int。
  • 不,valueOf 无法识别Ox。我们只需要传递没有Ox 的十六进制代码
猜你喜欢
  • 2015-11-10
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2023-01-19
  • 2011-11-13
  • 2016-08-18
  • 2021-07-10
  • 2023-01-14
相关资源
最近更新 更多