将十六进制字符串解析为整数会引发数字格式异常?

2022-08-31 22:15:01

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

int hex = 0x00ff00;

我认为你应该能够扭转这一过程。我有这个代码:

Integer.valueOf(primary.getFullHex());

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

这是方法:getFullHex

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

当我调用此方法时,它给出了我的这个:NumberFormatException

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

我不明白发生了什么。有人可以解释一下吗?


答案 1

这会有帮助吗?

Integer.parseInt("00ff00", 16)

16表示应将字符串解释为基于 16 的字符串(十六进制)。通过使用您可以解析二进制数,代表八进制数。 是默认值并解析十进制数。2810

在你的情况下,由于前缀前缀前置而无法正常工作 - 摆脱,你会没事的。Integer.parseInt(primary.getFullHex(), 16)0xgetFullHex()


答案 2

Integer.valueOf(字符串)采用十进制表示形式。您必须指定数字采用十六进制格式,例如

int value = Integer.valueOf("00ff0000", 16); 

请注意,Integer.valueOf(string,16);不接受前缀 。如果您的字符串包含前缀,则可以使用Integer.decode(“0x00ff0000”);0x0x