publicclass SysConvert { // 定义一个进制转换的类 private Stringnumber; privateint a; privateint b; public SysConvert(String number,int a, int b) { this.number = number; this.a = a; this.b = b; } public String getNumber() { String result =""; // 经过数制转换后的结果 try { if (a != 10) {// 判断转换前的数制是否是十进制 String temp = String.valueOf(convertToTen(a,number)); // 转换成十进制的数 result = String.valueOf(tenToNumber(b, temp));// 十进制转换成其它进制 } else { result = String.valueOf(tenToNumber(b,number)); // 十进制转换成其它进制 } return result; } catch (Exception e) { System.out.print("转换失败,请正确输入!"); } returnnull; } publicstatic int convertToTen(int a, String str) {// 其它进制转成十进制 double d = 0;// 声明转换后的数值 String subString; // 根据字符串的长度循环获得单个元素 for (int i = 0; i < str.length(); i++) { subString = str.substring(i, i + 1);// 将字符串按循环截取 if (a == 16) {// 判断是否是十六进制 subString =sixteenToNumber(subString); // 将字母转换成数字 } d += Integer.parseInt(subString)// 返回转换的结果 * Math.pow(a, str.length() - i - 1); } return (int) d; } publicstatic String tenToNumber(int a, String str) {// 十进制转成其他进制 int current = Integer.parseInt(str);// 将字符转换成整数 String opResult =""; // 判断转换后的数制是否是16进制 if (a == 16) { // 判断传入的数是否大于16,大于则逢16进一 while (current >= a) { opResult +=sixteenNumberToChar(current % a);// 将数字转换成字母 current /= a; } if (current != 0) opResult +=sixteenNumberToChar(current); } else { // 判断传入的值是否大于转换后的数制 while (current >= a) { opResult += current % a; current /= a; } if (current != 0) opResult += current; } String riResult =""; // 倒序二进制字符串 // 根据二进制的转换方式进行循环输出 for (int i = opResult.length() - 1; i >= 0; i--) { riResult = riResult + opResult.substring(i, i + 1); } return riResult; } publicstatic String sixteenToNumber(String s) {// 十六进制字母对应数字 String num =""; if (s.equals("A") || s.equals("a")) num ="10"; elseif (s.equals("B") || s.equals("b")) num ="11"; elseif (s.equals("C") || s.equals("c")) num ="12"; elseif (s.equals("D") || s.equals("d")) num ="13"; elseif (s.equals("E") || s.equals("e")) num ="14"; elseif (s.equals("F") || s.equals("f")) num ="15"; else num = s; return num; } publicstatic String sixteenNumberToChar(int num) {// 十六进制数字对应字母 String c =""; if (num == 10) c ="A"; elseif (num == 11) c ="B"; elseif (num == 12) c ="C"; elseif (num == 13) c ="D"; elseif (num == 14) c ="E"; elseif (num == 15) c ="F"; else c = String.valueOf(num); return c; } }
Java 各种进制转换
最新推荐文章于 2022-08-06 11:05:10 发布