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

方法1:使用Integer.parseInt()
public static byte hexCharToByte(char c) {
return (byte) Integer.parseInt(String.valueOf(c), 16);
}
方法2:使用预定义的查找表(更高效)
private static final byte[] HEX_CHAR_TO_BYTE = new byte[256];
static {
for (int i = 0; i < 256; i++) {
HEX_CHAR_TO_BYTE[i] = -1; // 初始化为无效值
}
for (char c = '0'; c <= '9'; c++) {
HEX_CHAR_TO_BYTE[c] = (byte) (c - '0');
}
for (char c = 'A'; c <= 'F'; c++) {
HEX_CHAR_TO_BYTE[c] = (byte) (10 + c - 'A');
}
for (char c = 'a'; c <= 'f'; c++) {
HEX_CHAR_TO_BYTE[c] = (byte) (10 + c - 'a');
}
}
public static byte hexCharToByte(char c) {
byte b = HEX_CHAR_TO_BYTE[c];
if (b == -1) {
throw new IllegalArgumentException("Invalid hex character: " + c);
}
return b;
}
方法3:处理完整的16进制字符串转byte数组
如果需要将整个16进制字符串转换为byte数组:
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;
}
使用示例
public static void main(String[] args) {
// 单个字符转换
char hexChar = 'A';
byte b = hexCharToByte(hexChar);
System.out.println("Hex char '" + hexChar + "' to byte: " + b); // 输出: 10
// 字符串转换
String hexString = "1A2B3C";
byte[] bytes = hexStringToByteArray(hexString);
System.out.println("Hex string to bytes: " + Arrays.toString(bytes)); // 输出: [26, 43, 60]
}
注意事项
- 16进制字符可以是'0'-'9'、'A'-'F'或'a'-'f'
- 对于单个字符转换,方法1和方法2都可以使用,方法2性能更高但需要初始化
- 对于字符串转换,方法3是最常用的方式
- 如果输入字符串长度为奇数,方法3会抛出异常(可以添加检查处理)
选择哪种方法取决于你的具体需求和性能要求,对于高性能场景,推荐使用预定义查找表的方法。

