**
输入要求:
要求1. 此程序没有加以控制,输入时请输入正确的要求,比如需要将8进制的数转化为其它进制的数时,字符串中不能出现9.
要求2. 因为数据类型为int,数不能过大,过大会出现错误。(也可以将int类型改为long类型,范围会增大。)**
import java.util.Scanner;
public class Transform {
public static void main(String[] args) {
String str = null;
int num1 = 0,num2 = 0;
System.out.println("请输入要转化的字符串:");
Scanner reader_str = new Scanner(System.in);
if(reader_str.hasNext()){
str = reader_str.next();
}
System.out.println("请输入字符串的进制数:");
Scanner reader_num1 = new Scanner(System.in);
if(reader_num1.hasNext()){
num1 = reader_num1.nextInt();
}
System.out.println("请输入需要转化成的进制数:");
Scanner reader_num2 = new Scanner(System.in);
if(reader_num2.hasNext()){
num2 = reader_num2.nextInt();
}
StringBuffer result = anyToany(num1, num2, str);
System.out.println(result);
}
// 将number从10进制转化十六进制
public static StringBuffer tenToSixteen(int number) {
StringBuffer str = new StringBuffer();
int shang = number;
int yu;
while (shang != 0) {
shang = number / 16;
yu = number % 16;
number = shang;
if (yu > 9) {
char form = (char) (yu - 10 + 'a');
str.append(form);
} else {
str.append(yu);
}
}
str.reverse();
return str;
}
// 将str从num进制转化到十进制
public static int anyToTen(String str, int num) {
int sum = 0;
int num_after;
for (int i = str.length() - 1; i >= 0; i--) {
char c = str.charAt(i);
if ((int) c > 96) {// 如果c是个字母
num_after = c - 'a' + 10;
} else { // 如果c是个数字
num_after = c - '0';
}
/* System.out.println("c"+i+": out:"+num_after); */
sum += num_after * Math.pow(num, str.length() - 1 - i);
}
return sum;
}
// 将number从十进制到num进制的转化
public static StringBuffer tenToAny(int number, int num) {
StringBuffer str = new StringBuffer();
int shang = number;
int yu;
while (shang != 0) {
shang = number / num;
yu = number % num;
number = shang;
if (yu > 9) {
char form = (char) (yu - 10 + 'a');
str.append(form);
} else {
str.append(yu);
}
}
str.reverse();
return str;
}
// 将str从num1进制转化num2进制
public static StringBuffer anyToany(int num1, int num2, String str) {
int first_form = anyToTen(str,num1); //先将str从num1进制转化为十进制
StringBuffer s = tenToAny(first_form, num2);//将十进制转化为num2进制
return s;
}
}
测试截图:
在线进制转换网站:http://tool.oschina.net/hexconvert/