在程式開發中,經常需要將數值在不同進制之間轉換。Java 標準庫提供了簡單易用的 API,支援從 2 進制到 36 進制的任意基數轉換。本文詳細介紹相關核心類別與實作範例。
Character.MIN_RADIX:最小基數(值為 2)Character.MAX_RADIX:最大基數(值為 36)Integer.parseInt(String s, int radix):將指定基數的字串解析為整數Integer.toString(int i, int radix):將整數轉換為指定基數的字串表示public class RadixConversionDemo {
public static void main(String[] args) {
System.out.println("最大基數: " + Character.MAX_RADIX); // 36
System.out.println("最小基數: " + Character.MIN_RADIX); // 2
String input = "100";
System.out.println("\n字串 \"" + input + "\" 在不同基數下的十進制值:");
for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
try {
int value = Integer.parseInt(input, radix);
System.out.printf("基數 %2d: %d%n", radix, value);
} catch (NumberFormatException e) {
System.out.printf("基數 %2d: 無效輸入%n", radix);
}
}
// 反向轉換:十進制轉其他基數
int number = 255;
System.out.println("\n十進制 " + number + " 轉換為各基數:");
for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
System.out.printf("基數 %2d: %s%n", radix, Integer.toString(number, radix));
}
}
}
最大基數: 36
最小基數: 2
字串 "100" 在不同基數下的十進制值:
基數 2: 4
基數 8: 64
基數 10: 100
基數 16: 256
基數 36: 1296
十進制 255 轉換為各基數:
基數 2: 11111111
基數 8: 377
基數 10: 255
基數 16: ff
基數 36: 73
public class RadixUtils {
/** 驗證基數範圍 */
public static void validateRadix(int radix) {
if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) {
throw new IllegalArgumentException("基數必須在 " + Character.MIN_RADIX + " 到 " + Character.MAX_RADIX + " 之間");
}
}
/** 任意基數字串轉十進制長整數 */
public static long parseLong(String s, int radix) {
validateRadix(radix);
return Long.parseLong(s, radix);
}
/** 十進制長整數轉任意基數字串 */
public static String toString(long value, int radix) {
validateRadix(radix);
return Long.toString(value, radix);
}
/** 直接在兩種基數之間轉換 */
public static String convert(String value, int fromRadix, int toRadix) {
long decimal = parseLong(value, fromRadix);
return toString(decimal, toRadix);
}
}
NumberFormatException-100 在任意基數下均可正確解析