这是一个有效的十六进制值吗?

Is this a valid Hex value?

我正在读取一系列十六进制值,使用代码读取值 `0x03B6:

Integer.parseInt("0x03B6",16);

导致异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "0x03B6"

但是,如果我删除值开头的 0x,结果将正确转换为 HEX:

Integer.parseInt("03B6",16)

0X 是表示它是十六进制值的约定吗? 03B6 是有效的十六进制 ?

使用十六进制计算器 - https://www.calculator.net/hex-calculator.html 也无法识别 0x03B6 但可以识别 03B6

十六进制数就是03B6。十六进制数字是 0-9 和 A-F,这就是为什么在输入 'x' 时出现异常的原因。

在许多语言中,您可以通过添加 0x 前缀以十六进制编写常量。这告诉编译器应该以 16 进制而不是 10 进制解释以下数字。10 是 10,而 0x10 是 16。某些语言如 C 也支持八进制(010 是8),还有一些支持二进制(0b10是2)。 C 是我所知道的最早使用这种 0 前缀思想的语言。

然而,parseInt 方法仅解析数字,因此您只需提供 03B6,并使用单独的参数来指示基数 16。

通常,它们在编译时被解释。您需要使用 Integer.decode。如果省略 0x 前缀,则必须指定 radix 并使用 parseInt.

要使用这些字符串实时解码,请执行以下操作。

String[] vals = { "0xF", "#111", "0x17C" };
for (String v : vals) {
    System.out.println(v + " -> " + Integer.decode(v));
}

打印

0xF -> 15
#111 -> 273
0x17C -> 380

此外,请注意仅以 0 为前缀的数字将解码为八进制。