Skip to main content

Convert Numbers Between Bases in Java

· One min read
Apache Wangye
Software developer and technical writer

Java's standard library supports conversions between bases 2 and 36. Digits 09 represent values zero through nine, while letters az 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.

Page views: --

Total views -- · Visitors --