Java如何输出十六进制?
- 后端开发
- 2025-06-03
- 7
基础方法:Integer.toHexString()
最常用的方式是使用Integer和Long类的toHexString()方法:
int decimal = 255; String hex = Integer.toHexString(decimal); // 输出: "ff" System.out.println(hex); long bigNum = 4294967295L; String longHex = Long.toHexString(bigNum); // 输出: "ffffffff" System.out.println(longHex);
特点:

- 自动小写输出
- 省略前导零(如15输出f而非0f)
- 支持负数(如-10输出fffffff6)
️ 补零技巧:
若需固定长度(如8位十六进制),配合String.format()补零:
String paddedHex = String.format("%08x", 255); // 输出: "000000ff"
格式化输出:String.format()
通过格式化字符串控制输出样式:
int num = 48879; System.out.println(String.format("0x%x", num)); // 小写: 0xbeef System.out.println(String.format("0X%X", num)); // 大写: 0XBEEF System.out.println(String.format("%#06x", 15)); // 带前导0和0x: 0x000f
格式说明符:

- %x:小写十六进制
- %X:大写十六进制
- %#x:添加0x前缀
- %08x:8位宽度,不足补零
处理字节数组
字节数组转十六进制字符串(常见于加密/网络通信):
byte[] bytes = {10, -20, 127, 0}; StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b & 0xFF)); // 按两位补零 } System.out.println(sb); // 输出: "0aec7f00"
关键点:

- b & 0xFF:将字节转为无符号整数(避免负值错误)
- %02x:强制两位显示(A~F小写)
大整数处理:BigInteger
超大整数(超过Long范围)的转换:
import java.math.BigInteger; BigInteger hugeNum = new BigInteger("123456789012345678901234567890"); String hugeHex = hugeNum.toString(16); // 基数为16 System.out.println(hugeHex); // 输出: "18ee90ff6c373e0ee4e3f0ad2"
自定义转换(教学目的)
手动实现转换逻辑(理解原理):
int number = 65535; char[] hexChars = "0123456789abcdef".toCharArray(); StringBuilder result = new StringBuilder(); while (number > 0) { int index = number % 16; // 取余数作为索引 result.insert(0, hexChars[index]); // 插入到结果前部 number /= 16; // 除16继续下一位 } System.out.println(result.length()>0 ? result : "0"); // 输出: "ffff"
最佳实践建议
- 常规整数 → 优先用Integer.toHexString()或String.format()
- 字节数组 → 循环 + String.format("%02x", b & 0xFF)
- 超大整数 → BigInteger.toString(16)
- 补零/前缀 → 用String.format()精确控制格式
- 性能敏感场景 → 避免频繁拼接字符串,用StringBuilder
注意事项
- 大小写敏感:toHexString()输出小写,String.format("%X")输出大写
- 负数处理:Java使用补码表示负数,直接转换可能产生较长结果(如-1→ffffffff)
- 前导零问题:内置方法省略前导零,需格式化补齐
引用说明:本文内容基于Oracle官方文档 Java Primitive Data Types 和 Formatter 类规范,代码示例遵循MIT开源协议,可自由使用。