📌  相关文章
📜  将十六进制字符串转换为字节数组的Java程序

📅  最后修改于: 2022-05-13 01:55:18.024000             🧑  作者: Mango

将十六进制字符串转换为字节数组的Java程序

十六进制字符串 –十六进制字符串是数字 0-9字符AF的组合,就像二进制字符串仅包含 0 和 1 一样。例如:“245FC”是一个十六进制字符串。

字节数组 – Java字节数组是仅用于存储字节数据类型的数组。字节数组的每个元素的默认值为 0。

给定一个字节数组,任务是将十六进制字符串转换为字节数组

例子:

Input - Hex String : "2f4a33"
Output - Byte Array : 47 74 51

Input - Hex String : "3b4a11"
Output - Byte Array : 59 74 17

有多种将十六进制字符串转换为字节数组的方法,下面列出了其中的一些方法。

方法:

  • 在Java中使用Integer类的parseInt()方法
  • 在Java中使用 BigInteger 的字节数组表示
  • 使用按位移位运算符

方法一——在Java中使用Integer类的parseInt()方法

Java中的 integer.parseInt() 方法将给定的字符串转换为整数。根据给定的问题陈述,由于我们必须将十六进制字符串转换为字节数组,因此我们首先将十六进制字符串的字符成对转换为特定的字节格式,并将该数字插入到字节数组中。在这种情况下,字节数组被初始化为十六进制字符串长度的一半。

以下是上述方法的实施——

Java
// Java Program to convert hex
// string to byte array
 
// Approach 1 - Using parseInt() method of
// Integer class in Java
 
import java.io.*;
 
public class GFG {
   public static void main(String[] args)
   {
      
     // Initializing the hex string and byte array
     String s = "2f4a33";
     byte[] ans = new byte[s.length() / 2];
       
     System.out.println("Hex String : "+s);
 
     for (int i = 0; i < ans.length; i++) {
         int index = i * 2;
        
           // Using parseInt() method of Integer class
         int val = Integer.parseInt(s.substring(index, index + 2), 16);
         ans[i] = (byte)val;
     }
         
     // Printing the required Byte Array
     System.out.print("Byte Array : ");
     for (int i = 0; i < ans.length; i++) {
         System.out.print(ans[i] + " ");
     }
   }
}


Java
// Java Program to convert hex
// string to byte array
 
// Approach 1 - Using Byte Array Representation
// of BigInteger in Java
 
import java.io.*;
// importing BigInteger class
import java.math.BigInteger;
 
class GFG {
    public static void main(String[] args)
    {
        String s = "3b4a11";
           
          // converting string to integer value
        int val = Integer.parseInt(s, 16);
        System.out.println("Hexadecimal String : " + s);
           
          // converting integer value to Byte Array
        BigInteger big = BigInteger.valueOf(val);
        byte[] ans = (big.toByteArray());
       
          // printing the byte array
        System.out.print("Byte Array : ");
        for (int i = 0; i < ans.length; i++)
            System.out.print(ans[i] + " ");
    }
}


Java
// Java program to convert hex
// string to byte array
 
// Approach 3 - Using Bitwise Shift Operators
 
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
           
         // initializing hex string and byte array
        String s ="1f3d44";
         System.out.println("Hex String : " + s);
       
          int len = s.length();
        byte[] ans = new byte[len / 2];
       
        for (int i = 0; i < len; i += 2) {
             // using left shift operator on every character
            ans[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
           
          // printing the required result
          System.out.print("Byte Array : ");
           
          for(int i=0;i


输出
Hex String : 2f4a33
Byte Array : 47 74 51 

方法 2 – 在Java中使用 BigInteger 的字节数组表示

在这种方法中,我们将使用 BigInteger 类的 toByteArray() 方法。使用 parseInt() 方法将十六进制数转换为整数值后,我们需要将整数转换为字节数组。下面是 BigInteger 类的 toByteArray() 方法的作用,它将整数值转换为字节数组并返回它。

以下是上述方法的实施——

Java

// Java Program to convert hex
// string to byte array
 
// Approach 1 - Using Byte Array Representation
// of BigInteger in Java
 
import java.io.*;
// importing BigInteger class
import java.math.BigInteger;
 
class GFG {
    public static void main(String[] args)
    {
        String s = "3b4a11";
           
          // converting string to integer value
        int val = Integer.parseInt(s, 16);
        System.out.println("Hexadecimal String : " + s);
           
          // converting integer value to Byte Array
        BigInteger big = BigInteger.valueOf(val);
        byte[] ans = (big.toByteArray());
       
          // printing the byte array
        System.out.print("Byte Array : ");
        for (int i = 0; i < ans.length; i++)
            System.out.print(ans[i] + " ");
    }
}
输出
Hexadecimal String : 3b4a11
Byte Array : 59 74 17 

方法 3 – 使用按位移位运算符

将十六进制字符串转换为字节数组的另一种方法是使用Java的二进制移位运算符。这里使用了“<<”按位左移运算符。为了以十六进制顺序获取字符的数值,使用Java中的字符 .digit()方法。

以下是上述方法的实施——

Java

// Java program to convert hex
// string to byte array
 
// Approach 3 - Using Bitwise Shift Operators
 
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
           
         // initializing hex string and byte array
        String s ="1f3d44";
         System.out.println("Hex String : " + s);
       
          int len = s.length();
        byte[] ans = new byte[len / 2];
       
        for (int i = 0; i < len; i += 2) {
             // using left shift operator on every character
            ans[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
           
          // printing the required result
          System.out.print("Byte Array : ");
           
          for(int i=0;i
输出
Hex String : 1f3d44
Byte Array : 31 61 68