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; } }
相关文章推荐
- java中byte数组与十六进制字符串相互转换
- Java String的关键点
- java集群技术
- 利用Spring将配置文件读入Map
- Eclipse常见设置及快捷键使用总结(更新中)
- hdu3887 Counting Offspring(dfs序+树状数组)
- java AES加密解密方法
- Java中各种正则表达式验证[邮箱、密码前后空格、日期合法、IP]
- java 获取两个日期的相差天数
- struts2之文件上传
- Hibernate + jbosstools 整合、配置、测试详解
- Java排序算法
- JAVA设计模式之单例模式
- java设计模式之——代理模式
- Java IO流详解
- Introduction to Java Programming编程题9.8<二进制转十进制>
- MyBatis简介与配置MyBatis+Spring+MySql
- java socket编程的简单分析
- spring aop
- JavaWeb之下载文件