我正在尝试从r,g,b值创建颜色值,添加alpha字节以创建颜色int。
但我使用以下方式收到错误:
Integer.valueOf(colorStr,16);
colorStr
是我构建的字符串,现在发送错误的值是"0XFF2f6b55"
它发给我无效的int。
答案 0 :(得分:5)
Java integer涵盖-2 ^ 31到2 ^ 31-1(2147483647)的值。你的值是(4281297749)十进制,这对于java的整数来说太大了。
Java的long涵盖范围更广的-2 ^ 63到2 ^ 63-1。其中包括您的价值,因此建议使用Long.valueOf(colorStr, 16)
并切换为使用long。 (当您使用的值超出整数值范围时,会出现一个建议。)
在我看来,你知道,但万一你没有;如果0x
是字符串值的一部分,则应将{{1}}删除,因为如果保留,则会产生无效的格式异常。
答案 1 :(得分:1)
您的字符串对于已签名的int来说太大了 - 它们从-0x80000000
转到0x7FFFFFFF
。尝试:
int i = (int) Long.parseLong(colorStr.substring(2), 16);
这会导致负int
,这可能不是您想要的。 (使用颜色时,使用红色,绿色,蓝色和alpha分量的元组值可能更方便。)
valueOf()
或parseInt()
/ parseLong()
都不会识别0x
前缀,您需要摆脱它。