import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
String input[]=new String[n];
for (int i=0;i < n;i++)
{
input[i] = scan.next();
}
for (int i=0;i < n;i++)
{
StringBuilder sbBin=new StringBuilder();
StringBuilder sbOct=new StringBuilder();
//将16进制转成2进制
for (int j=0;j < input[i].length();j++)
{
String bin=Integer.toBinaryString(Integer.valueOf("" + input[i].charAt(j), 16));
if(input[i].length()>1&&j!=0)
switch (bin.length()) {
case 1:
bin="000"+bin;
break;
case 2:
bin="00"+bin;
break;
case 3:
bin="0"+bin;
break;
}
sbBin.append(bin);
}
if (sbBin.length() < 3)
{
sbOct.append(Integer.toOctalString(Integer.valueOf(sbBin.toString(), 2)));
}
else
{
int len=sbBin.length() ;
String tString;
//sbBin存的二进制
//1 111 000 比如这个二进制数,下面的语句将第一个数“1”转成8进制
if(len%3!=0){
tString=Integer.toOctalString(
Integer.valueOf(
sbBin.toString().substring(0,len%3)
, 2)
);
sbOct.append(tString);
}
//1 111 0000 比如这个二进制数,下面的语句将111 000分别转成8进制
for (int k=0 ;k<len/ 3;k++)
{
//k表示段
tString=Integer.toOctalString(
Integer.valueOf(sbBin.toString().substring(k*3+len%3
,k*3+len%3+3)
, 2));
sbOct.append(tString);
}
}
System.out.println(sbOct.toString());
}
}
}
【算法】任意大小的16进制数转8进制
最新推荐文章于 2020-04-26 00:36:00 发布