带有负数的数字类型解析函数异常

Use*_*049 5 java hex integer parseint

System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 parseInt 或 valueOf 方法将十六进制数转换为整数类型的负数时,该方法会为负数抛出 NumberFormatException。我在任何地方都找不到答案。

Era*_*ran 5

Integer.parseInt()Integer.valueOf()期待负值的减号 ( -)。

因此,“FFFFFFFF”被解析为大于 的正值Integer.MAX_VALUE。因此例外。

如果要将其解析为负值,请将其解析为long并强制转换为int

System.out.println((int)Long.parseLong("FFFFFFFF", 16));
Run Code Online (Sandbox Code Playgroud)

印刷

-1
Run Code Online (Sandbox Code Playgroud)