public class Sample11_2
{
public static void main(String[] args)
{
String number = "60";
byte b = Byte.parseByte(number);
System.out.println("十进制byte: " + b);
b = Byte.parseByte(number, 8);
System.out.println("八朝向byte: " + b);
b = Byte.parseByte(number, 16);
System.out.println("十六进制byte: " + b);
}
}
我想问的第一个问题是:为什么在用这些方法时转换后的“60”并不是真正意义上的数值?
比如,在这个代码中,”60“转换后的8进制是48而不是74,16进制的是96而不是3c。
我想问的第二个问题是:明明字符串中只有数值,但为什么运行时还会报错?
比如,在转换为8进制和16进制时,如果number的值为”0“、”1“、……、”7“时运行不会报错。但为”8“或”9“时就会报错?而且当number为”10“时,转换后的8进制和16进制分别为8和16,而不是12和A?
4 个解决方案
#1
8进制那打错字了,不好意思。
#2
我知道出什么问题了,
是这样子的:
基本类型的类.parseXXX(String, int)
这句的意思是,认为String是int指定的进制数,因此String中不能出现不能超过int的数字。
假如想要输出二进制、八进制、十六进制等,需要:
Integer.toBinaryString(int)
Integer.toOctalString(int)
Integer.toHexString(int)
Byte类并未提供toXXX(int)的方法,因此咳咳……
是这样子的:
基本类型的类.parseXXX(String, int)
这句的意思是,认为String是int指定的进制数,因此String中不能出现不能超过int的数字。
假如想要输出二进制、八进制、十六进制等,需要:
Integer.toBinaryString(int)
Integer.toOctalString(int)
Integer.toHexString(int)
Byte类并未提供toXXX(int)的方法,因此咳咳……
#3
原来如此,有点明白了。看来是我看书时理解错误啊。
其实转换出来的都是十进制,其结果是根据括号中所指定的XX进制的数来转换的。
#4
是这样的,看一下API
Parses the string argument as a signed byte in the radix specified by the second argument.
也就是说把第一个参数按照第二个参数所指定的进制处理。
所以60=6*8^1+0*8^0 = 48;
60 = 6*16^1+0*16^0 = 96
Parses the string argument as a signed byte in the radix specified by the second argument.
也就是说把第一个参数按照第二个参数所指定的进制处理。
所以60=6*8^1+0*8^0 = 48;
60 = 6*16^1+0*16^0 = 96
#1
8进制那打错字了,不好意思。
#2
我知道出什么问题了,
是这样子的:
基本类型的类.parseXXX(String, int)
这句的意思是,认为String是int指定的进制数,因此String中不能出现不能超过int的数字。
假如想要输出二进制、八进制、十六进制等,需要:
Integer.toBinaryString(int)
Integer.toOctalString(int)
Integer.toHexString(int)
Byte类并未提供toXXX(int)的方法,因此咳咳……
是这样子的:
基本类型的类.parseXXX(String, int)
这句的意思是,认为String是int指定的进制数,因此String中不能出现不能超过int的数字。
假如想要输出二进制、八进制、十六进制等,需要:
Integer.toBinaryString(int)
Integer.toOctalString(int)
Integer.toHexString(int)
Byte类并未提供toXXX(int)的方法,因此咳咳……
#3
原来如此,有点明白了。看来是我看书时理解错误啊。
其实转换出来的都是十进制,其结果是根据括号中所指定的XX进制的数来转换的。
#4
是这样的,看一下API
Parses the string argument as a signed byte in the radix specified by the second argument.
也就是说把第一个参数按照第二个参数所指定的进制处理。
所以60=6*8^1+0*8^0 = 48;
60 = 6*16^1+0*16^0 = 96
Parses the string argument as a signed byte in the radix specified by the second argument.
也就是说把第一个参数按照第二个参数所指定的进制处理。
所以60=6*8^1+0*8^0 = 48;
60 = 6*16^1+0*16^0 = 96