Convert Numbers Between Bases in Java
· One min read
Java's standard library supports conversions between bases 2 and 36. Digits 0–9 represent values zero through nine, while letters a–z represent values ten through thirty-five.
Convert decimal integers
int value = 255;
System.out.println(Integer.toString(value, 2)); // 11111111
System.out.println(Integer.toString(value, 8)); // 377
System.out.println(Integer.toString(value, 16)); // ff
System.out.println(Integer.toString(value, 36)); // 73
Convenience methods are also available:
Integer.toBinaryString(255);
Integer.toOctalString(255);
Integer.toHexString(255);
Convert arbitrary-size values
import java.math.BigInteger;
static String convert(String value, int sourceRadix, int targetRadix) {
if (sourceRadix < Character.MIN_RADIX || sourceRadix > Character.MAX_RADIX ||
targetRadix < Character.MIN_RADIX || targetRadix > Character.MAX_RADIX) {
throw new IllegalArgumentException("radix must be between 2 and 36");
}
return new BigInteger(value, sourceRadix).toString(targetRadix);
}
System.out.println(convert("ff", 16, 2)); // 11111111
BigInteger preserves values that exceed long. Negative values are supported, and output letters are lowercase by default. Use toUpperCase() when uppercase hexadecimal output is required.
Invalid characters or unsupported radices cause NumberFormatException or IllegalArgumentException. Do not parse a large value as int or long before creating the BigInteger, because overflow may already have occurred.