杰瑞科技汇

Java字符串如何转16进制数组?

Java 字符串转16进制数组

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

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

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

注意事项

  1. 输入的16进制字符串必须是偶数长度,因为每个字节由两个16进制字符表示
  2. 某些方法可能无法正确处理负数的16进制表示
  3. 如果字符串包含非16进制字符,会抛出NumberFormatException
  4. 对于大字符串,方法2和4可能比方法1更高效

选择哪种方法取决于你的具体需求和项目环境,如果只是简单转换,方法2是最直接的;如果已经在使用Apache Commons Codec,方法3最方便。

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