杰瑞科技汇

Java 16进制字符如何转byte?

Java 16进制字符转byte

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

Java 16进制字符如何转byte?-图1
(图片来源网络,侵删)

方法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]
}

注意事项

  1. 16进制字符可以是'0'-'9'、'A'-'F'或'a'-'f'
  2. 对于单个字符转换,方法1和方法2都可以使用,方法2性能更高但需要初始化
  3. 对于字符串转换,方法3是最常用的方式
  4. 如果输入字符串长度为奇数,方法3会抛出异常(可以添加检查处理)

选择哪种方法取决于你的具体需求和性能要求,对于高性能场景,推荐使用预定义查找表的方法。

Java 16进制字符如何转byte?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇