杰瑞科技汇

Java 16进制字符串转byte如何正确转换?

Java 16进制字符串转byte数组

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

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

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

注意事项

  1. 输入的16进制字符串长度必须是偶数,否则会抛出异常
  2. 字符串中不应包含任何非16进制字符(0-9, a-f, A-F)
  3. 如果字符串以"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的方法是最简洁可靠的。

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