进制转达换问题 String a = Integer.toHexString(-2147483646); 得出 a = 80000002; int b = Integer.parseInt("80000002",16); 运行这一句,却报错. 为什么?请指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同意一楼的说法:16进制数80000002转换成10进制数是2147483650,超出了int的表示范围,long b = Long.parseLong("80000002", 16);System.out.println(b); 80000002是-2147483646的补码表示形式,而在字符串解析的时候 Integer.parseInt("80000002",16);这个方法始终把16进制字符串看成是正数的,如果你要解析一个16进制的负数,必须在前面加负号,如:parseInt("-FF", 16) 返回 -255所以在解析Integer.parseInt("80000002",16);是把80000002看作为一个正数,那么它的表示范围已经超过了int的表示范围,所以抛出异常;int b = Integer.parseInt("-7ffffffe", 16); System.out.println(b);//输出的值为-2147483646 parseIntpublic static int parseInt(String s, int radix) throws NumberFormatException使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。 如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常: 第一个参数为 null 或一个长度为零的字符串。 基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。 假如字符串的长度超过 1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中的任何字符都不是指定基数的数字。 字符串表示的值不是 int 类型的值。 示例: parseInt("0", 10) 返回 0parseInt("473", 10) 返回 473parseInt("-0", 10) 返回 0parseInt("-FF", 16) 返回 -255parseInt("1100110", 2) 返回 102parseInt("2147483647", 10) 返回 2147483647parseInt("-2147483648", 10) 返回 -2147483648parseInt("2147483648", 10) 抛出 NumberFormatExceptionparseInt("99", 8) 抛出 NumberFormatExceptionparseInt("Kona", 10) 抛出 NumberFormatExceptionparseInt("Kona", 27) 返回 411787参数:s - 包含要分析的整数表示形式的 Stringradix - 分析 s 时使用的基数。 返回:使用指定基数的字符串参数表示的整数。 抛出: NumberFormatException - 如果 String 不包含可分析的 int。 JAVA中关于返回值的问题,求助大神们帮助 关于正则表达式 求助,有关Clipboard类 求救算法高手! 关于接口问题! 谁知道JAVA网络字节顺序的转换函数 调用系统命令实现删除文件的操作如何实现 高分请教各位高人!!!! Image和Graphics两个类的区别 一道十分不解的JAVA问题 想不通的问题,请高手指教!!! 一个异常问题
long b = Long.parseLong("80000002", 16);
System.out.println(b);
Integer.parseInt("80000002",16);这个方法始终把16进制字符串看成是正数的,如果你要解析一个16进制的负数,必须在前面加负号,如:parseInt("-FF", 16) 返回 -255
所以在解析
Integer.parseInt("80000002",16);是把80000002看作为一个正数,那么它的表示范围已经超过了int的表示范围,所以抛出异常;
int b = Integer.parseInt("-7ffffffe", 16);
System.out.println(b);//输出的值为-2147483646
public static int parseInt(String s,
int radix)
throws NumberFormatException使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。
如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常: 第一个参数为 null 或一个长度为零的字符串。
基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
假如字符串的长度超过 1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中的任何字符都不是指定基数的数字。
字符串表示的值不是 int 类型的值。
示例: parseInt("0", 10) 返回 0
parseInt("473", 10) 返回 473
parseInt("-0", 10) 返回 0
parseInt("-FF", 16) 返回 -255
parseInt("1100110", 2) 返回 102
parseInt("2147483647", 10) 返回 2147483647
parseInt("-2147483648", 10) 返回 -2147483648
parseInt("2147483648", 10) 抛出 NumberFormatException
parseInt("99", 8) 抛出 NumberFormatException
parseInt("Kona", 10) 抛出 NumberFormatException
parseInt("Kona", 27) 返回 411787参数:
s - 包含要分析的整数表示形式的 String
radix - 分析 s 时使用的基数。
返回:
使用指定基数的字符串参数表示的整数。
抛出:
NumberFormatException - 如果 String 不包含可分析的 int。