Java:如何将Hex转换为int?

时间:2015-02-04 22:56:52

标签: java numberformatexception parseint

我正在使用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)时,它会在非透明像素上返回负数

3 个答案:

答案 0 :(得分:4)

你可以做到

int number = (int)Long.parseLong("ffff00fe", 16);

答案 1 :(得分:0)

数字2,147,483,647(或十六进制7FFFFFFF)是32位带符号二进制整数的最大正值。你试图转换的东西几乎是两倍,这意味着二进制数的第一位是1;在带符号的二进制整数中,第一位为1意味着它是负数。

基本上,你需要更大的东西来解析它。 请尝试使用(int) Long.parseLong("ffff00fe", 16)代替Integer.parseInt("ffff00fe",16)

答案 2 :(得分:0)

大于0x7fff_ffff的值太大而无法作为签名ints.处理Java 8添加了处理ints的方法,就好像它们包含无符号值一样。只需将parseInt替换为parseUnsignedInt:

即可
Integer.parseUnsignedInt("ffaaaaaa", 16)

如果需要使用Java 7及更早版本,可以将其解析为long,然后将其转换为int.或者,如果值是常量,则可以将它们写为数字常量例如0xffaaaaaa或甚至0xffaa_aaaa并避免处理字符串转换(自Java 7以来允许使用数字下划线,并且可以使它们更容易阅读)。