Java: 如何将Hex转为int?
Java: How to turn Hex into int?
我正在使用 BufferedImage
(PNG 格式)并想用另一种颜色替换颜色。
我将所有颜色存储为字符串以便于处理,但是...
for(int x=0;x<output.getWidth();x++)
for(int y=0;y<output.getHeight();y++)
if(output.getRGB(x,y)==Integer.parseInt("ffff00fe",16))
output.setRGB(x,y,Integer.parseInt("ffaaaaaa",16));
结果整数应该是负数,但它抛出 NumberFormatException
当我这样做时 output.getRGB(x,y)
它 returns 非透明像素上的负数
你可以
int number = (int)Long.parseLong("ffff00fe", 16);
数字 2,147,483,647(或十六进制 7FFFFFFF)是 32 位有符号二进制 整数 的最大正值。您要转换的内容几乎是它的两倍,这意味着二进制数的第一位是 1;在有符号二进制整数中,第一位为 1 表示它是负数。
基本上,您需要更大的东西来解析它。
尝试 (int) Long.parseLong("ffff00fe", 16)
而不是 Integer.parseInt("ffff00fe",16)
大于 0x7fff_ffff
的值太大而无法作为带符号的 ints.
Java 8 添加了处理 ints
的方法,就好像它们包含无符号值一样。只需将 parseInt
替换为 parseUnsignedInt:
Integer.parseUnsignedInt("ffaaaaaa", 16)
如果您需要使用 Java 7 及更早版本,您可以将其解析为 long
,然后将其转换为 int.
或者,如果值是常量,您可以将它们写成数字常量,例如 0xffaaaaaa
甚至 0xffaa_aaaa
并避免处理字符串转换(自 Java 7 起允许数字中的下划线,并且可以使它们更容易阅读)。
我正在使用 BufferedImage
(PNG 格式)并想用另一种颜色替换颜色。
我将所有颜色存储为字符串以便于处理,但是...
for(int x=0;x<output.getWidth();x++)
for(int y=0;y<output.getHeight();y++)
if(output.getRGB(x,y)==Integer.parseInt("ffff00fe",16))
output.setRGB(x,y,Integer.parseInt("ffaaaaaa",16));
结果整数应该是负数,但它抛出 NumberFormatException
当我这样做时 output.getRGB(x,y)
它 returns 非透明像素上的负数
你可以
int number = (int)Long.parseLong("ffff00fe", 16);
数字 2,147,483,647(或十六进制 7FFFFFFF)是 32 位有符号二进制 整数 的最大正值。您要转换的内容几乎是它的两倍,这意味着二进制数的第一位是 1;在有符号二进制整数中,第一位为 1 表示它是负数。
基本上,您需要更大的东西来解析它。
尝试 (int) Long.parseLong("ffff00fe", 16)
而不是 Integer.parseInt("ffff00fe",16)
大于 0x7fff_ffff
的值太大而无法作为带符号的 ints.
Java 8 添加了处理 ints
的方法,就好像它们包含无符号值一样。只需将 parseInt
替换为 parseUnsignedInt:
Integer.parseUnsignedInt("ffaaaaaa", 16)
如果您需要使用 Java 7 及更早版本,您可以将其解析为 long
,然后将其转换为 int.
或者,如果值是常量,您可以将它们写成数字常量,例如 0xffaaaaaa
甚至 0xffaa_aaaa
并避免处理字符串转换(自 Java 7 起允许数字中的下划线,并且可以使它们更容易阅读)。