十六进制转换十进制(JAVA版)
Posted 房东的猫AND狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六进制转换十进制(JAVA版)相关的知识,希望对你有一定的参考价值。
解题思路路大概为:现将十六进制数转换为二进制数,再讲二进制数转换为八进制数。在进行十六进制转换为八进制时可以利用JAVA中的‘&’运算符号,一个十六进制数可以表示为四个二进制数,利用‘&’可以将一个十六进制数向右移位四次得到四位二进制数。在进行二进制数转换为八进制时,一个八进制可以表示为三位二进制数,因此三位合一位即可。本题中要注意的一点是在转换为二进制数要保证位数为3的倍数。
import java.util.*; public class Main { public static void main(String args[]) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String a[]=new String[n]; String b[]=new String[n]; for(int i=0;i<n;i++) { a[i]=sc.next(); b[i]=""; } for(int i=0;i<n;i++) { b[i]=hexToOctal(a[i]); System.out.println(b[i]); } } static String hexToOctal(String str) { String s=to2(str); String s1=add0(s); return to8(s1); } static String to2(String str) { char chs[]= {‘0‘,‘1‘}; String s=new String("0123456789ABCDEF"); char c1[]=str.toCharArray(); int pos=str.length()*4; char c2[]=new char[pos]; for(int i=str.length()-1;i>=0;i--) { int temp=s.indexOf(c1[i]); for(int j=0;j<4;j++) { c2[--pos]=chs[temp&1]; temp=temp>>>1; } } return new String(c2); } static String add0(String str) { String s=str.substring(str.indexOf(‘1‘)); int len=s.length(); if(len%3==0) return s; else if(len%3==1) return "00"+s; else return "0"+s; } static String to8(String str) { HashMap<String,Character> map=new HashMap<String, Character>(); map.put("000", ‘0‘); map.put("001", ‘1‘); map.put("010", ‘2‘); map.put("011", ‘3‘); map.put("100", ‘4‘); map.put("101", ‘5‘); map.put("110", ‘6‘); map.put("111", ‘7‘); int pos=str.length()/3; char c1[]=new char[pos]; for(int i=str.length();i>0;i-=3) { String s=str.substring(i-3, i); c1[--pos]=map.get(s); } return new String(c1); } }
以上是关于十六进制转换十进制(JAVA版)的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 中的十进制转换器无法正确处理丢失焦点