当前位置:首页 > 后端开发 > 正文

Java如何输出十六进制?

在Java中,可以使用 Integer.toHexString()将整数转换为十六进制字符串输出。,“ java,System.out.println(Integer.toHexString(255)); // 输出 "ff",` ,或使用String.format 格式化输出:,` java,System.out.printf("%x%n", 255); // 小写输出 "ff",System.out.printf("%X%n", 255); // 大写输出 "FF",

基础方法:Integer.toHexString()

最常用的方式是使用IntegerLong类的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()补零:

Java如何输出十六进制?  第1张

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"

最佳实践建议

  1. 常规整数 → 优先用Integer.toHexString()String.format()
  2. 字节数组 → 循环 + String.format("%02x", b & 0xFF)
  3. 超大整数BigInteger.toString(16)
  4. 补零/前缀 → 用String.format()精确控制格式
  5. 性能敏感场景 → 避免频繁拼接字符串,用StringBuilder

注意事项

  • 大小写敏感toHexString()输出小写,String.format("%X")输出大写
  • 负数处理:Java使用补码表示负数,直接转换可能产生较长结果(如-1ffffffff
  • 前导零问题:内置方法省略前导零,需格式化补齐

引用说明:本文内容基于Oracle官方文档 Java Primitive Data Types 和 Formatter 类规范,代码示例遵循MIT开源协议,可自由使用。

0