现在,我正在尝试找到一种方法,在Java中将数字从一个基数转换为另一个数字,给出一个数字,数字所在的基数,以及转换为的基数.
public static void BaseConversion(String number, int base1, int base2){
//convert the number from one base to another
}
Run Code Online (Sandbox Code Playgroud)
我找到了JavaScript的解决方案,我想知道是否可以在Java中做类似的事情:
function convertFromBaseToBase(str, fromBase, toBase){
var num = parseInt(str, fromBase); //convert from one base to another
return num.toString(toBase);
}
Run Code Online (Sandbox Code Playgroud)
nul*_*ent 51
你可以做到
return Integer.toString(Integer.parseInt(number, base1), base2);
Run Code Online (Sandbox Code Playgroud)
所以使用您的函数签名,在Java中:
public String convertFromBaseToBase(String str, int fromBase, int toBase) {
return Integer.toString(Integer.parseInt(str, fromBase), toBase);
}
Run Code Online (Sandbox Code Playgroud)
public class BaseToBaseConv {
static String baseToBase(String num, int base1, int base2) {
int no = convFrmBaseToDeci(num, base1);
return convFrmDecToBase(no, base2);
}
static String convFrmDecToBase(int num, int base) {
String res = "";
int rem;
// Convert input number is given base by repeatedly
// dividing it by base and taking remainder
while (num > 0) {
rem = num % base;
if (base == 16) {
if (rem == 10)
res += 'A';
else if (rem == 11)
res += 'B';
else if (rem == 12)
res += 'C';
else if (rem == 13)
res += 'D';
else if (rem == 14)
res += 'E';
else if (rem == 15)
res += 'F';
else
res += rem;
} else
res += rem;
num /= base;
}
// Reverse the result
return new StringBuffer(res).reverse().toString();
}
static int convFrmBaseToDeci(String num, int base) {
if (base < 2 || (base > 10 && base != 16))
return -1;
int val = 0;
int power = 1;
for (int i = num.length() - 1; i >= 0; i--) {
int digit = digitToVal(num.charAt(i));
if (digit < 0 || digit >= base)
return -1;
// Decimal equivalent is str[len-1]*1 +
// str[len-1]*base + str[len-1]*(base^2) + ...
val += digit * power;
power = power * base;
}
return val;
}
static int digitToVal(char c) {
if (c >= '0' && c <= '9')
return (int) c - '0';
else
return (int) c - 'A' + 10;
}
public static void main(String [] args) {
System.out.println(baseToBase("12345", 10, 2));
System.out.println(baseToBase("11000000111001", 2, 10));
System.out.println(baseToBase("ABC11", 16, 2));
System.out.println(baseToBase("10101011110000010001", 2, 16));
System.out.println(baseToBase("12322", 8, 16));
}
}
Run Code Online (Sandbox Code Playgroud)
的两个参数的版本Integer.parseInt或Long.parseLong将做到这一点,如果你可以肯定有问题的数量范围内int或long分别。如果您不能保证这一点,请使用java.math.BigInteger:
BigInteger bi = new BigInteger(number, base1);
return bi.toString(base2);
Run Code Online (Sandbox Code Playgroud)
这可以处理任意大的整数,例如
System.out.println(
new BigInteger("12345678901234567890123456789", 10).toString(16));
// prints 27e41b3246bec9b16e398115 - too big to represent as a long
Run Code Online (Sandbox Code Playgroud)
我相信这会起作用:
long x = 10;
int baseToConvertTo = 9;
System.out.println(Long.toString(x, baseToConvertTo));
Run Code Online (Sandbox Code Playgroud)
输出: 11
| 归档时间: |
|
| 查看次数: |
68330 次 |
| 最近记录: |