java中进制转换

1.十进制转所有

解析:例如:十转十六
先输入一个整型数字,判断其是否为0,若为0,则其16进制同样为0; 若number不为0,则对16取余,并转换成16进制相应的字符;number=number/16,重复过程2、3,用字符数组s依次保存每一位; 输出的时候逆序输出即可

package com.test;

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {

		// 10进制转所有
		
		Scanner sc = new Scanner(System.in); 
		System.out.println("请输入10进制数:"); 
		int number = sc.nextInt();
		
		//目标进制
		int aaseSystem=16; 
		// 10转所有
		aaseSystem(number, aaseSystem); // 进制数
	}
	
	// 10进制转所有
		public static void aaseSystem(int number, int aaseSystem) {
			
			// 进制数aaseSystem
			int i = 0;
			char[] S = new char[100];
			if (number == 0) {
				System.out.print(0);
			} else {
				while (number != 0) {
					int t = number % aaseSystem;

					// 存余数
					if (t >= 0 && t < (aaseSystem > 10 ? 10 : aaseSystem)) {
						S[i] = (char) (t + '0');
						i++;
					} else {
						S[i] = (char) (t - 10 + 'A');
						i++;
					}
					number = number / aaseSystem;
				}

				for (int j = i - 1; j >= 0; j--) {
					System.out.print(S[j]);
				}
			}
		}
		
}

输出:

2.其他进制转十(加权求和)

解析: 例如:以十六进制为例

​ 如果原进制数是十进制一下,例如2进制:0101=0* 2^3+1* 2^2+0 2^1+1 * 2^0,相当于每一个数乘以当前进制的位权次方的和,最终结果就是10进制数。

​ 如果原进制数是10进制以上,则用ascII,例如字母A:a-‘A’+10)*Math.pow(16,位权);相当于10 *16^位权

**注意:**要注意将用户输入的小写转换成大写:

​ String string=scanner.next();
​ string=string.toUpperCase();

统一用大写来计算,也可以写两个判断条件,都可。

package com.test;

import java.util.Scanner;

public class Test2 {
    
	public static void main(String[] args) {
        
		Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个数:");
		String string=scanner.next();
		string=string.toUpperCase();
	    long sum=0;
		int slen=string.length();
		char a;
		for(int i=0;i<slen;i++) {
			a=string.charAt(i);
			if (a>='0'&&a<='9') {
				sum+=(a-'0')*Math.pow(16,slen-i-1);
			}else if (a>='A'&&a<='F') {
				sum+=(a-'A'+10)*Math.pow(16,slen-i-1);
			}
		}
		System.out.println("你的十进制数为:"+sum);	
	}		
}

结果:

更多推荐

java中个各进制中的转换,十进制转十六进制,十六进制转十进制等