Java 字符串转16进制数组
在Java中,将字符串转换为16进制数组(字节数组)有几种常见方法,以下是几种实现方式:

方法1:使用String的getBytes()和BigInteger
public static byte[] stringToHexByteArray(String str) {
return new BigInteger(str, 16).toByteArray();
}
方法2:逐个字符转换
public static byte[] stringToHexByteArray(String str) {
if (str == null || str.length() % 2 != 0) {
throw new IllegalArgumentException("字符串必须为偶数长度");
}
byte[] result = new byte[str.length() / 2];
for (int i = 0; i < str.length(); i += 2) {
String hexByte = str.substring(i, i + 2);
result[i / 2] = (byte) Integer.parseInt(hexByte, 16);
}
return result;
}
方法3:使用Apache Commons Codec库
如果项目中已经使用了Apache Commons Codec,可以使用它的Hex类:
import org.apache.commons.codec.binary.Hex;
public static byte[] stringToHexByteArray(String str) {
return Hex.decodeHex(str.toCharArray());
}
方法4:使用Java 8的Stream API
public static byte[] stringToHexByteArray(String str) {
if (str == null || str.length() % 2 != 0) {
throw new IllegalArgumentException("字符串必须为偶数长度");
}
byte[] result = new byte[str.length() / 2];
IntStream.range(0, str.length() / 2)
.forEach(i -> {
String hexByte = str.substring(2 * i, 2 * i + 2);
result[i] = (byte) Integer.parseInt(hexByte, 16);
});
return result;
}
使用示例
public static void main(String[] args) {
String hexString = "48656C6C6F20576F726C64"; // "Hello World"的16进制表示
// 使用方法2
byte[] byteArray = stringToHexByteArray(hexString);
// 打印结果
System.out.println("字节数组长度: " + byteArray.length);
for (byte b : byteArray) {
System.out.printf("%02X ", b);
}
}
注意事项
- 输入的16进制字符串必须是偶数长度,因为每个字节由两个16进制字符表示
- 某些方法可能无法正确处理负数的16进制表示
- 如果字符串包含非16进制字符,会抛出NumberFormatException
- 对于大字符串,方法2和4可能比方法1更高效
选择哪种方法取决于你的具体需求和项目环境,如果只是简单转换,方法2是最直接的;如果已经在使用Apache Commons Codec,方法3最方便。

