1. 概述

本文将介绍在Java中将整数转换为十六进制的多种方法。我们将通过代码示例详细讨论每种实现方式,并分析其适用场景。

2. 整数转十六进制基础

在深入代码前,先理解转换原理:

  • 整数使用十进制(基数为10),包含0-9的数字
  • 十六进制使用16个符号表示,包含0-9和A-F

Java中实现转换主要有三种途径:

  1. 数学算法实现
  2. Java内置方法
  3. 第三方库

3. 原始算法实现

通过数学运算实现转换的核心步骤:

  1. 将整数除以16
  2. 对商继续除以16
  3. 将余数转换为十六进制字符
  4. 重复直到商为0

基于此算法实现转换器:

class IntegerToHex {
    static final String digits = "0123456789ABCDEF";
    static String integerToHex(int input) {
        if (input <= 0)
            return "0";
        StringBuilder hex = new StringBuilder();
        while (input > 0) {
            int digit = input % 16;
            hex.insert(0, digits.charAt(digit));
            input = input / 16;
        }
        return hex.toString();
    }
}

测试用例验证:

@Test
void givenIntegerValue_whenUseRawMethod_thenWillGetHexValue() {
    String result = IntegerToHex.integerToHex(1055);
    assertEquals("41F", result);
}

⚠️ 该方法仅支持正整数,负数会返回"0"

4. String.format()方法

使用String类的format()方法,通过%x格式化符实现转换:

@Test
void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValue() {
    String result = String.format("%02x", 255);
    assertEquals("ff", result);
}

✅ 可通过格式化符控制补零:

  • %02x:2位十六进制(不足补零)
  • %04x:4位十六进制(不足补零)
@Test
void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZeros() {
    String result = String.format("%04x", 255);
    assertEquals("00ff", result);
}

✅ 大小写控制:

  • %x:小写输出
  • %X:大写输出
@Test
void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZerosAndUpperLetter() {
    String result = String.format("%04X", 255);
    assertEquals("00FF", result);
}

5. toHexString()方法

Integer和Long类提供的静态方法toHexString()

  • 底层调用toUnsignedString()
  • 自动处理为无符号值
  • ⚠️ 不支持负数输入

Integer类使用示例:

@Test
void givenIntegerValue_whenUseIntegerToHexString_thenWillGetHexValue() {
    String result = Integer.toHexString(1000);
    assertEquals("3e8", result);
}

Long类使用示例:

@Test
void givenIntegerValue_whenUseLongToHexString_thenWillGetHexValue() {
    String result = Long.toHexString(255L);
    assertEquals("ff", result);
}

6. toString()方法

Integer和Long类的toString()方法支持指定进制:

@Test
public void givenNegativeIntegerValue_whenUseIntegerToString_thenWillGetHexValue() {
    String result = Integer.toString(-1458, 16);
    assertEquals("-5b2", result);
}

✅ 支持有符号整数转换,这是与前两种方法的显著区别

Long类使用示例:

@Test
public void givenLongValue_whenUseLongToString_thenWillGetHexValue() {
    String result = Long.toString(158, 16);
    assertEquals("9e", result);
}

7. Apache Commons Codec库

使用第三方库实现转换,需先添加依赖:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

通过Hex.encodeHexString()实现:

@Test
public void givenIntegerValue_whenUseApacheCommons_thenWillGetHexSignedValue() {
    String result = Hex.encodeHexString(new byte[] { (byte) 254 });
    assertEquals("fe", result);
}

⚠️ 该方法存在明显限制:

  • 输入需为字节数组
  • Java的byte类型范围:-128到127
  • 仅适用于小于255的值

Java 17引入了java.util.HexFormat,提供类似功能但更现代化

8. 总结

本文系统介绍了Java中整数转十六进制的多种实现方式:

  • 原始算法:适合理解原理,但功能有限
  • String.format():灵活控制格式,推荐使用
  • toHexString():简洁高效,但仅支持无符号数
  • toString():支持有符号数转换
  • 第三方库:特定场景下的补充方案

根据实际需求选择合适方法,可优化代码性能和可读性。所有示例代码可在GitHub仓库获取。


原始标题:Convert Integer to Hexadecimal in Java