您的位置:首页 > 其它

十六进制转二进制(转)

2018-03-21 12:29 148 查看
/*
* 问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。
  
* */
/*
* >>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。例如:

var temp

temp = -14 >>> 2变量 temp 的值为 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 107
* */
import java.util.HashMap;
import java.util.Scanner;

public class castInteger {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String a[] = new String
;
String b[] = new String
;
for (int i = 0; i < a.length; i++) {
a[i] = in.next();
b[i] = "";
}
for (int i = 0; i < a.length; i++) {
b[i] = hexToOctal(a[i]);// 把a数组中的数转成八进制
System.out.println(b[i]);
}
}

// 十六进制转八进制
public static String hexToOctal(String str) {
String s = hexToBinary(str);// 16->2
String s1 = binaryHandle(s);// 二进制处理器
return binaryToOctal(s1);// 2->8
}

// 十六进制转成二进制
public static String hexToBinary(String hexNum) {
char[] chs = { '0', '1' };
String str = new String("0123456789ABCDEF");
char[] charArray = hexNum.toUpperCase().toCharArray();// toCharArray():将字符串对象中的字符转大写字母转换为一个字符数组
int pos = charArray.length * 4;
char[] binaryArray = new char[pos];
for (int i = charArray.length - 1; i >= 0; i--) {
int temp = str.indexOf(charArray[i]);
for (int j = 0; j < 4; j++) {
binaryArray[--pos] = chs[temp & 1];
temp = temp >>> 1;

}
}
return new String(binaryArray);
}

// 处理二进制字符串
public static String binaryHandle(String binary) {
String str = binary.substring(binary.indexOf('1'));
int len = str.length();
if (len % 3 == 0)
return str;
else if (len % 3 == 1)
return "00" + str;
else
return "0" + str;
}

// 二进制转成八进制
public static String binaryToOctal(String binary) {
HashMap<String, Character> map = new HashMap<String, Character>();
map.put("000", '0');
map.put("001", '1');
map.put("010", '2');
map.put("011", '3');
map.put("100", '4');
map.put("101", '5');
map.put("110", '6');
map.put("111", '7');
int pos = binary.length() / 3;
char[] octArray = new char[pos];
for (int i = binary.length(); i > 0; i -= 3) {
String s = binary.substring(i - 3, i);
octArray[--pos] = map.get(s);
}
return new String(octArray);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法基础