十六进制转八进制 java 蓝桥杯基础

我的第24篇博客

十六进制 转 二进制

二进制转 八进制

在这里插入图片描述

import java.util.Scanner;

public class 十六进制转八进制 {
	
	public static void main(String[] args) {
		
		Scanner sc =  new Scanner(System.in);
		
		int n = sc.nextInt();//接收输入行数
		
		String []a = new String[n];//将输入的十六进制数 存储进 字符串数组。
		
		for (int i = 0; i < n; i++) {
			a[i] = sc.next();
		}
		
		sc.close();
		
		for (int j = 0; j < n; j++) {
			String binary = toBinary(a[j]);// 调用 十六进制转换二进制函数
			
			if (binary.length()%3==1) {//因为二进制转换为八进制的时候。要三位三位的转换。
				
				binary = "00"+binary;//所以二进制数的位数要是三的倍数,这个步骤,就是当二进制的位数不是三的倍数时。将它转为三的倍数
			}
			
			if (binary.length()%3==2) {
				binary = "0"+binary;
			}
			
			String oct = toOct(binary);//调用 二进制转为八进制函数
			
			System.out.println(oct);
		}
		
	}
	
	private static String toBinary(String hex) {//十六进制转为二进制  hex应为十六进制的字符串
		
		int len_hex = hex.length();
	    StringBuffer stringBuffer = new StringBuffer();
	    for (int i = 0; i < len_hex; i++) {
	    	switch (hex.charAt(i)) {//逐个检索十六进制数。依次改为二进制数
			case '0':stringBuffer.append("0000");//  这里就是  十六进制和二进制的转换表
				break;
			case '1':stringBuffer.append("0001");
				break;
			case '2':stringBuffer.append("0010");
				break;
			case '3':stringBuffer.append("0011");
				break;
			case '4':stringBuffer.append("0100");
				break;
			case '5':stringBuffer.append("0101");
				break;
			case '6':stringBuffer.append("0110");
				break;
			case '7':stringBuffer.append("0111");
				break;
			case '8':stringBuffer.append("1000");
				break;
			case '9':stringBuffer.append("1001");
				break;
			case 'A':stringBuffer.append("1010");
				break;
			case 'B':stringBuffer.append("1011");
				break;
			case 'C':stringBuffer.append("1100");
				break;
			case 'D':stringBuffer.append("1101");
				break;
			case 'E':stringBuffer.append("1110");
				break;
			case 'F':stringBuffer.append("1111");
				break;

			default:
				break;
			}
	    }
	    return stringBuffer.toString();// 返回二进制数字符串
	}
		private static String toOct(String binary) {
			int i;
			StringBuffer stringBuffer2 = new StringBuffer();
			if (binary.substring(0, 3).equals("000")) {//先检查头三位 是不是000   如果是的话,那么直接从第四位开始
														//题中说了  头位不能有0
				i = 3;
			}
			else {
				i = 0;
			}
			for ( ; i < binary.length(); i+=3) {
				switch (binary.substring(i, i+3)) {// 三位三位的进行检索
				case "000": stringBuffer2.append("0");
					break;
				case "001": stringBuffer2.append("1");
					break;
				case "010": stringBuffer2.append("2");
					break;
				case "011": stringBuffer2.append("3");
					break;
				case "100": stringBuffer2.append("4");
					break;
				case "101": stringBuffer2.append("5");
					break;
				case "110": stringBuffer2.append("6");
					break;
				case "111": stringBuffer2.append("7");
					break;
				

				default:
					break;
				}
			}
			return stringBuffer2.toString();  //返回 八进制字符串		
		}
		
}

当对字符串进行修改的时候,需要使用 StringBuffer 类。

和 String 类不同的是,StringBuffer 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuffer append(String s)
将指定的字符串追加到此字符序列。

toString()方法

返回此序列中数据的字符串表示形式。

substring(int start, int end) 方法,

返回一个新的 String,它包含此序列当前所包含的字符子序列。这个子序列是根据 start end 的位置确定的。

charAt(int index)
返回此序列中指定索引处的 char 值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值