您的位置:首页 > 编程语言 > Java开发

Introduction to Java Programming编程题9.9<二进制转十六进制>

2015-08-25 16:41 531 查看
/*
Enter a binary string: 000110001111
18F
Enter a binary string: 110001111
18F
Enter a binary string: 101010
2A
*/

import java.util.Scanner;

public class BinaryToHex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Enter a binary string: ");
String b = input.nextLine();

for (int i = 0; i < b.length(); i++) {
if (!Character.isDigit(b.charAt(i)) || b.charAt(i) > '1') {
System.out.println("The string must be 0 or 1: ");
System.exit(0);
}
}
String hex = binaryToHex(b);

System.out.println(hex);
}

public static String binaryToHex(String b) {
int decimalValue = 0;
StringBuilder stringBuilder = new StringBuilder();
int splits;
/* 将二进制分成四位一组如:000110001111转成十进制分别为:
* 0001 = 1,1000 = 8, 1111 = 15,大于等于10的调用
* decimalToHex(int val)函数转换为字母"A-F",将结果写入字符串即:18F
*/
if (b.length() % 4 == 0)
splits = 4;
else
splits = b.length() % 4;

for (int i = 0; i < splits && splits <= b.length(); i++) {
decimalValue = decimalValue * 2 + toDecimal(b.charAt(i));
if (i == splits - 1) {
if (decimalValue >= 10) {
char[] ch = decimalToHex(decimalValue);
stringBuilder.append(ch);
} else
stringBuilder.append(decimalValue);
decimalValue = 0;
splits += 4;
}
}

return stringBuilder.toString();
}

public static int toDecimal(char ch) {
return ch - 48; // 0的ASCII码为:48
}

public static char[] decimalToHex(int val) {
char[] ch = new char[1];
/* 因为stringbuilder.append()不支持追加char类型数据,
* 所以改用char数组
*/
ch[0] = (char) (val - 10 + 'A');

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