如何在 Java 中以十六进制字符串转换字节数组

Asad Riaz 2023年10月12日
  1. HEX_ARRAY[] 方法将字节数组转换为 Java 中的十六进制字符串
  2. Hex.encodeHexString() 方法将 Java 中的字节数组转换为十六进制字符串
  3. DatatypeConverter() 方法以 Java 中的十六进制字符串转换字节数组
  4. append(.format) 方法将 Java 中的字节数组转换为十六进制字符串
如何在 Java 中以十六进制字符串转换字节数组

在本教程中,我们将学习如何在 Java 中将字节数组转换为十六进制字符串。

HEX_ARRAY[] 方法将字节数组转换为 Java 中的十六进制字符串

我们将从第一个方法开始,对于此转换,我们将使用由所有可能的十六进制值组成的 HEX_ARRAY[]。此方法比其他任何方法都快。

示例代码:

public class SimpleTesting {
  public static void main(String[] args) {
    char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
    byte b[] = new byte[2];
    b[0] = 20;
    b[1] = 10;
    char[] hexChars = new char[b.length * 2];
    for (int j = 0; j < b.length; j++) {
      int v = b[j] & 0xFF;
      hexChars[j * 2] = HEX_ARRAY[v >>> 4];
      hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
    }
    System.out.println(hexChars);
  }
}

输出:

140A

Hex.encodeHexString() 方法将 Java 中的字节数组转换为十六进制字符串

在 Java 中将字节数组转换为十六进制字符串的第二种方法是 Hex.encodeHexString() 方法。由于它是一个 apache 的公共库,因此需要先将 apache.commons.codec.binary.Hex() 方法导入编译器中。

示例代码:

import java.util.Arrays;
import org.apache.commons.codec.binary.Hex;

public class SimpleTesting {
  public static void main(String[] args) {
    byte[] byteArray = new byte[] {'S', 'i', 'm', 'p', 'l', 'e', 'T', 'e', 's', 't', 'i', 'n', 'g'};
    System.out.println("Byte Array: ");
    System.out.println(Arrays.toString(byteArray));
    System.out.println("Hex String Conversion: " + Hex.encodeHexString(byteArray));
  }
}

输出:

Byte Array: 
[83, 105, 109, 112, 108, 101, 84, 101, 115, 116, 105, 110, 103]
Hex String Conversion: 53696d706c6554657374696e67

DatatypeConverter() 方法以 Java 中的十六进制字符串转换字节数组

另一种方法是 Java 中的 javax.xml.bind.DatatypeConverter.printHexBinary() 方法。该方法获取字节并将其从数组转换为 Hex

示例代码:

import java.util.Arrays;
import javax.xml.bind.*;

public class SimpleTesting {
  public static void main(String[] args) {
    byte byteArray[] = {(byte) 00, (byte) 10, (byte) 20, (byte) 30, (byte) 40};
    String hexString = javax.xml.bind.DatatypeConverter.printHexBinary(byteArray);
    System.out.println("Byte Array: ");
    System.out.println(Arrays.toString(byteArray));
    System.out.println("Hex String Conversion: " + hexString);
  }
}

输出:

Byte Array: 
[0, 10, 20, 30, 40]
Hex String Conversion: 000A141E28

append(.format) 方法将 Java 中的字节数组转换为十六进制字符串

我们可以使用的另一种方法是在 Java 中使用 stringBuilder 中包含的 append(.format)。它的工作原理是将字节数组中的每个单个值转换为相应的十六进制字符串。

示例代码:

public class SimpleTesting {
  public static void main(String[] args) {
    byte a[] = new byte[2];
    a[0] = 20;
    a[1] = 10;
    StringBuilder sb = new StringBuilder(a.length * 2);
    for (byte b : a) sb.append(String.format("%02x", b));
    System.out.println(sb);
  }
}

输出:

140a

相关文章 - Java Array

相关文章 - Java String