Java进制转换
在前几天巩固基础的时候刷到了进制转换的题目,直接就上手做了(心里很喜欢这种相对简单的题目),因为有一系列的API可以使用,结果写着写着就蒙圈了。
于是下定决心重新梳理一遍,以下是个人总结心得,有错误之处一定要提出来,一起学习,共同进步,谢谢大家了!
题目概述:输入一个八进制的数,输出其相应的十六进制数。
总体思路(个人理解):
首先输入的必须是字符串类型的一个数值字符串。因为编译器读取的数值默认都是十进制,所以所谓的进制说不定只是脑海中的进制,而不是当前代码中的进制类型。况且十六进制数值有效为(0 ~ 9 , A ~ F(大小写都可以)),不可能让一个数值类型取到字符吧。
再者,想象和现实是不一致的!假设输入的是一个数值类型,自己想的是我要输入的是一个某进制的数,实际上都被编译器认为是十进制的了!
数值字符串(用户确定的进制)-->十进制的数值-->指定进制的数值字符串(用户指定的进制)
但是字符串类型编译器无法识别进制。此时就可以调用Long.parseLong(String num,int radix)方法进行转换(Integer.parseInt,Double.parsedouble也是可以的)
其中;num为将要转换的数值字符串,radic为该字符串的进制类型,此方法的返回值是十进制的数值
接着使用过Long.toString(long num,int radix)方法将十进制的数值转换为指定进制的数值。(Integer.toString,Double.toString也是可以的)
此时转换得到的字符串是一个指定进制的数值,最后用System.out.println(str)输出转换后的数值。
用到的方法:
个人理解:parseLong返回值是long,也就是一个数值,所以需要后面的radix确定进制。
个人理解:这里用到的方法是toString(long i, int radix),这个方法是可以指定任意进制类型的,比较灵活。这个方法返回的是一个字符串,返回的字符串是由radix指定的进制类型的数值字符串。
当然也有直接的方法:
这三个转成指定进制的方法(从上到下:16,8,2),个人觉得只需记住一个toString()方法即可,因为可以任意进制,上述的进制也就包含在内了。(可能是我比较懒吧)
代码展示:八进制转十六进制(想要实现其他进制的转换只需修改两个方法中的radic即可):
import java.util.*;
public class Learn {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String num = sc.nextLine();
long temp = Long.parseLong(num,8);
String res = Long.toString(temp,16);
System.out.println(res);
}
}
希望我的小小总结希望能帮助到未曾谋面的你们。