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 起允许数字中的下划线,并且可以使它们更容易阅读)。