在 Java 中,将 16 进制(Hexadecimal)字符串转换为 10 进制(Decimal)整数,可以使用 Integer.parseInt() 或 Long.parseLong() 方法,并指定 16 作为基数,以下是详细的代码示例和说明:

使用 Integer.parseInt()(适用于 int 范围)
public class HexToDecimal {
public static void main(String[] args) {
String hexString = "1A3F"; // 16 进制字符串
int decimalValue = Integer.parseInt(hexString, 16); // 转换为 10 进制
System.out.println("16 进制 " + hexString + " 转换为 10 进制是: " + decimalValue);
// 输出: 16 进制 1A3F 转换为 10 进制是: 6719
}
}
说明:
Integer.parseInt(String str, int radix)是一个静态方法,用于将字符串解析为有符号整数。radix参数指定进制(16表示 16 进制)。- 如果字符串包含非 16 进制字符(如
G、Z),会抛出NumberFormatException。
使用 Long.parseLong()(适用于超出 int 范围的大数)
16 进制字符串表示的数值超出 int 范围(Long.MAX_VALUE),应使用 Long.parseLong():
public class HexToDecimalLong {
public static void main(String[] args) {
String largeHexString = "FFFFFFFFFFFFFFFF"; // 16 进制字符串(对应 Long.MAX_VALUE)
long decimalValue = Long.parseLong(largeHexString, 16);
System.out.println("16 进制 " + largeHexString + " 转换为 10 进制是: " + decimalValue);
// 输出: 16 进制 FFFFFFFFFFFFFFFF 转换为 10 进制是: 18446744073709551615
}
}
处理带前缀的 16 进制字符串(如 0x 或 0X)
16 进制字符串带有 0x 或 0X 前缀,需要先去除前缀:
public class HexWithPrefix {
public static void main(String[] args) {
String hexWithPrefix = "0x1A3F";
// 去除前缀 "0x" 或 "0X"
String cleanHex = hexWithPrefix.replaceAll("^0[xX]", "");
int decimalValue = Integer.parseInt(cleanHex, 16);
System.out.println("16 进制 " + hexWithPrefix + " 转换为 10 进制是: " + decimalValue);
// 输出: 16 进制 0x1A3F 转换为 10 进制是: 6719
}
}
异常处理
如果输入的字符串不是有效的 16 进制数,会抛出 NumberFormatException,建议使用 try-catch 处理:
public class HexConversionWithErrorHandling {
public static void main(String[] args) {
String invalidHex = "1G3F"; // 包含非法字符 'G'
try {
int decimalValue = Integer.parseInt(invalidHex, 16);
System.out.println("转换结果: " + decimalValue);
} catch (NumberFormatException e) {
System.err.println("错误: '" + invalidHex + "' 不是有效的 16 进制字符串!");
}
}
}
反向转换:10 进制转 16 进制
如果需要反向操作(10 进制转 16 进制),可以使用 Integer.toHexString() 或 Long.toHexString():
public class DecimalToHex {
public static void main(String[] args) {
int decimalValue = 6719;
String hexString = Integer.toHexString(decimalValue); // 转换为 16 进制字符串
System.out.println("10 进制 " + decimalValue + " 转换为 16 进制是: " + hexString.toUpperCase());
// 输出: 10 进制 6719 转换为 16 进制是: 1A3F
}
}
| 操作 | 方法 | 示例 |
|---|---|---|
| 16 进制 → 10 进制(int) | Integer.parseInt(str, 16) |
Integer.parseInt("1A3F", 16) → 6719 |
| 16 进制 → 10 进制(long) | Long.parseLong(str, 16) |
Long.parseLong("FFFFFFFF", 16) → 4294967295L |
| 10 进制 → 16 进制 | Integer.toHexString(num) |
Integer.toHexString(6719) → "1a3f" |
根据需求选择合适的方法,并注意处理异常和边界情况。
