java中的进制转换

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		/**
		 * 十进制转其他进制
		 * Integer.toHexString(10);  //将10转换为十六进制,返回字符串类型
           Integer.toOctalString(10);  //将10转为八进制,返回字符串类型
           Integer.toBinaryString(10);  //将10转为二进制,返回字符串类型
		 */
		int a=sc.nextInt();
		//转16进制
		System.out.println(Integer.toHexString(a));
		//转8进制
		System.out.println(Integer.toOctalString(a));
		//转2进制
		System.out.println(Integer.toBinaryString(a));
		
		
		/**
		 * 十六进制转十进制
		 * Integer.valueOf("FFFF",16).toString();  //valueOf()方法返回Integer类型,调用toString()返回字符串
		 * Integer.parseInt("FFFF",16);  //返回int基本数据类型
		 * Integer.toString(0xFFFF);  //该方法可直接传入表示十六进制数字的基本数据类型,方法返回字符串
		 */
		System.out.println(Integer.valueOf("FFFF", 16).toString());
		
		/**
		 * 八进制转十进制
		 * Integer.valueOf("17",8).toString();  //valueOf()方法返回Integer类型,调用toString()返回字符串
		 * Integer.parseInt("17",8);  //返回int基本数据类型
		 * Integer.toString(017);  //该方法可直接传入表示八进制数字的基本数据类型,方法返回字符串
		 */
		System.out.println(Integer.valueOf("17",8).toString());
		
		/**
		 * 二进制转十进制
		 * Integer.valueOf("0101",2).toString();  //valueOf()方法返回Integer类型,调用toString()返回字符串
		 * Integer.parseInt("0101",2);  //返回int基本数据类型
		 */
		System.out.println(Integer.valueOf("0101",2).toString());
	}

十进制转任意进制

import java.util.Scanner;

public class Test {
    
    private static char[] array = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
    public static String conversion(int number, int n) {
        StringBuilder result = new StringBuilder();
        while (number > 0) {
            //将array[number % n]插入result下标为0的位置
            result.insert(0, array[number % n]);
            number /= n;
        }
        return result.toString();
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        System.out.println(conversion(a, b));;
    }
}

十进制转十六进制,按除16取余倒数

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String s="";
        char c=' ';
        if(n==0) {s="0";}
        int m;
        while(n!=0) {
        	//取到余数
            m=n%16;
            //如果在10以上就转成字母
            if(m/10==1) {
            	c=(char)(65+(m%10));
            	//如果在10以下就转成数字
            }else if(m/10==0) {
            	c=(char)(48+m);
            }
            s=c+s;
            n=n/16;            
        }
        System.out.println(s);
    }

}

十六进制转八进制

import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
		
		int n;
		Scanner scanner = new Scanner(System.in);
		n=scanner.nextInt();
		
		String[] a= new String[n];
		
		for(int i=0;i<n;i++){
			a[i]=scanner.next();//接受用户输入
		}
		
        for(int i=0;i<n;i++){
        	//先转换为二进制
        	String strBinary = toBary(a[i]);
        	//看转化完的二进制长度
        	int len = strBinary.length();
        	//注意八进制是三个二进制数一组,所以模三,不是3的整数倍的在前面补零
        	if(len%3==1) strBinary = "00" + strBinary;
        	if(len%3==2) strBinary = "0" + strBinary;
        	String strOctal = toOctal(strBinary);
        	System.out.println(strOctal);
        }
	}
	//十六进制转二进制算法
	private static String toBary(String strShi){
		//长度
		int len_strShi = strShi.length();
		StringBuffer sBuffer = new StringBuffer();
		for(int i=0;i<len_strShi;i++){
			//截取十六进制数的每一个字符,并将其转换为对应二进制数
			switch (strShi.charAt(i)) {
			case '0':sBuffer.append("0000");break;
			case '1':sBuffer.append("0001");break;
			case '2':sBuffer.append("0010");break;
			case '3':sBuffer.append("0011");break;
			case '4':sBuffer.append("0100");break;
			case '5':sBuffer.append("0101");break;
			case '6':sBuffer.append("0110");break;
			case '7':sBuffer.append("0111");break;
			case '8':sBuffer.append("1000");break;
			case '9':sBuffer.append("1001");break;
			case 'A':sBuffer.append("1010");break;
			case 'B':sBuffer.append("1011");break;
			case 'C':sBuffer.append("1100");break;
			case 'D':sBuffer.append("1101");break;
			case 'E':sBuffer.append("1110");break;
			case 'F':sBuffer.append("1111");break;
			default:
				break;
			}
		}
		return sBuffer.toString();
	}
	//二进制转换为八进制算法
	private static String toOctal(String strBinary) {
		int len = strBinary.length();
		int k;
		
		StringBuffer sBuffer = new StringBuffer();
		//看看前三位是不是0,是零就从第四位开始截取
		if (strBinary.substring(0, 3).equals("000")) {
			k=3;
		} else {
			k=0;
		}
		
		for(int i=k;i<len-2;i+=3){
			switch (strBinary.substring(i,i+3)){
			case "000":sBuffer.append("0");break;
			case "001":sBuffer.append("1");break;
			case "010":sBuffer.append("2");break;
			case "011":sBuffer.append("3");break;
			case "100":sBuffer.append("4");break;
			case "101":sBuffer.append("5");break;
			case "110":sBuffer.append("6");break;
			case "111":sBuffer.append("7");break;
			default:
				break;
			}
		}
		return sBuffer.toString();
	}
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1while(true){learn}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值