将十六进制字符串解析为整数会引发 NumberFormatException?

2022-01-14 00:00:00 integer hex java parseint

所以,在 Java 中,您知道如何像这样声明整数:

So, In Java, you know how you can declare integers like this:

int hex = 0x00ff00;

我认为您应该能够逆转该过程.我有这个代码:

I thought that you should be able to reverse that process. I have this code:

Integer.valueOf(primary.getFullHex());

其中 primary 是自定义 Color 类的对象.它的构造函数接受一个整数表示不透明度(0-99)和一个十六进制字符串(例如 00ff00).

where primary is an object of a custom Color class. It's constructor takes an Integer for opacity (0-99) and a hex String (e.g. 00ff00).

这是 getFullHex 方法:

public String getFullHex() {
    return ("0x" + hex);
}

当我调用此方法时,它会给出我的 NumberFormatException:

When I call this method it gives my this NumberFormatException:

java.lang.NumberFormatException: For input string: "0xff0000"

我不明白发生了什么.谁能解释一下?

I can't understand what's going on. Can someone please explain?

推荐答案

这会有帮助吗?

Integer.parseInt("00ff00", 16)

16 表示您应该将字符串解释为基于 16 的(十六进制).使用 2 可以解析二进制数,8 代表八进制.10 是默认值,解析十进制数.

16 means that you should interpret the string as 16-based (hexadecimal). By using 2 you can parse binary number, 8 stands for octal. 10 is default and parses decimal numbers.

在您的情况下, Integer.parseInt(primary.getFullHex(), 16) 将不起作用,因为 0x 前缀由 getFullHex() - 摆脱,你会没事的.

In your case Integer.parseInt(primary.getFullHex(), 16) won't work due to 0x prefix prepended by getFullHex() - get rid of and you'll be fine.

相关文章