Java 各种进制转换

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;
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值