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

方法1:使用Integer.parseInt和位运算
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
方法2:使用Apache Commons Codec
如果项目中可以使用第三方库,Apache Commons Codec提供了最简洁的方法:
import org.apache.commons.codec.binary.Hex;
public static byte[] hexStringToByteArray(String s) {
return Hex.decodeHex(s.toCharArray());
}
方法3:使用Java 8的BigInteger
import java.math.BigInteger;
public static byte[] hexStringToByteArray(String s) {
return new BigInteger(s, 16).toByteArray();
}
方法4:使用Java 17的String类(Java 17+)
Java 17引入了更简单的方法:
public static byte[] hexStringToByteArray(String s) {
byte[] bytes = new byte[s.length() / 2];
for (int i = 0; i < s.length(); i += 2) {
bytes[i / 2] = (byte) Integer.parseInt(s.substring(i, i + 2), 16);
}
return bytes;
}
注意事项
- 输入的16进制字符串长度必须是偶数,否则会抛出异常
- 字符串中不应包含任何非16进制字符(0-9, a-f, A-F)
- 如果字符串以"0x"或"0X"开头,需要先去除前缀
示例使用
public static void main(String[] args) {
String hexString = "1a2b3c4d5e6f";
byte[] bytes = hexStringToByteArray(hexString);
for (byte b : bytes) {
System.out.printf("%02x ", b);
}
}
输出结果将是:
1a 2b 3c 4d 5e 6f
选择哪种方法取决于你的具体需求和项目环境,如果可以使用第三方库,Apache Commons Codec的方法是最简洁可靠的。


