思路一:将数据转换为十进制,然后转换到对应进制。
核心代码:
public static StringBuilder convert(String srcValue,int srcHex,int tarHex)
{
int num =0;
int t = 0,i=0;
char[] ch = srcValue.toCharArray();
for(;i<ch.length;i++)
{
if(ch[i]>='0' && ch[i]<='9')
{
t = ch[i] - '0';
}
else if(ch[i] >= 'A' && ch[i] <= 'F')
{
t = ch[i] - 'A' + 10;
}
num = num * srcHex + t;
}
i = 0;
StringBuilder sb = new StringBuilder();
while(num != 0)
{
t = num % tarHex;
char chTemp;
if(t>=0 && t<=9)
{
chTemp = (char)(t + '0');
}
else
{
chTemp = (char)(t - 10 + 'A');
}
sb.append(chTemp);
num /= tarHex;
}
return sb;
}
测试实例:
import java.util.*;
class ConvertDemo
{
public static void main(String[] args)
{
while(true)
{
System.out.println("请选择源数据的进制类型(2,8,10,16):");
int srcHex = inputHex();
System.out.println("请输入数据:");
Scanner sc = new Scanner(System.in);
String srcValue = sc.next();
System.out.println("请选择转换的进制(2,8,10,16):");
int tarHex = inputHex();
StringBuilder sbResult = convert(srcValue,srcHex,tarHex);
if(sbResult != null)
System.out.println(srcHex + "进制数:" + srcValue + "转换为" + tarHex + "进制,结果:"+ sbResult.reverse());
else
System.out.println("转换失败。");
System.out.println();
}
}
public static int inputHex()
{
Scanner sc = new Scanner(System.in);
while(true)
{
int k = sc.nextInt();
if(!(k == 2 || k == 8 || k == 10 || k==16))
{
System.out.println("进制输入不正确,是否继续(y/n)?");
String tip = sc.next();
if("n".equals(tip) || "N".equals(tip))
{
return -1;
}
}
else
{
return k;
}
}
}
public static StringBuilder convert(String srcValue,int srcHex,int tarHex)
{
int num =0;
int t = 0,i=0;
char[] ch = srcValue.toCharArray();
for(;i<ch.length;i++)
{
if(ch[i]>='0' && ch[i]<='9')
{
t = ch[i] - '0';
}
else if(ch[i] >= 'A' && ch[i] <= 'F')
{
t = ch[i] - 'A' + 10;
}
num = num * srcHex + t;
}
i = 0;
StringBuilder sb = new StringBuilder();
while(num != 0)
{
t = num % tarHex;
char chTemp;
if(t>=0 && t<=9)
{
chTemp = (char)(t + '0');
}
else
{
chTemp = (char)(t - 10 + 'A');
}
sb.append(chTemp);
num /= tarHex;
}
return sb;
}
}
//下面这三个方法分别转换成相应的进制。
public static void toBin(int num,int x)
{
System.out.print("您输入的"+x+"进制数的二进制形式是:");
trans(num,1,1);
}
public static void toOct(int num,int x)
{
System.out.print("您输入的"+x+"进制数的八进制形式是:");
trans(num,7,3);
}
public static void toHex(int num,int x)
{
System.out.print("您输入的"+x+"进制数的十六进制形式是:");
trans(num,15,4);
}
//trans():上边三个进制转换函数调用这个方法就可以完成进制的转换。
public static void trans(int num, int base, int offset)
{
if(num == 0)
{
System.out.println(0);
return;
}
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while(num != 0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int i = pos; i < arr.length; i++)
{
System.out.print(arr[i]);
}
System.out.println();
System.out.println();
}
以上都只进行了整型的转换,浮点型没有。