Programa Java para convertir una string hexadecimal en una array de bytes

String hexadecimal: una string hexadecimal es una combinación de los dígitos 0-9 y los caracteres AF , al igual que una string binaria comprende solo 0 y 1. Por ejemplo: “245FC” es una string hexadecimal.

Array de bytes: una array de bytes de Java es una array que se utiliza para almacenar solo tipos de datos de bytes . El valor predeterminado de cada elemento de la array de bytes es 0.

Dada una array de bytes, la tarea es convertir Hex String en Byte Array

Ejemplo: 

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

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

Existen numerosos enfoques para convertir una string hexadecimal en una array de bytes, y algunos de ellos se enumeran a continuación.

Enfoques:

  • Usando el método parseInt() de la clase Integer en Java
  • Uso de la representación de array de bytes de BigInteger en Java
  • Uso de operadores de desplazamiento bit a bit

Enfoque 1: uso del método parseInt() de la clase Integer en Java

El método integer.parseInt() en Java convierte una string determinada en un número entero. De acuerdo con la declaración del problema dada, dado que tenemos que convertir una string hexadecimal en una array de bytes, primero convertiremos los caracteres de la string hexadecimal en pares a la formación de bytes específica e insertaremos ese número en la array de bytes. En esto, la array de bytes se inicializa con un tamaño de la mitad de la longitud de la string hexadecimal. 

A continuación se muestra la implementación del enfoque anterior:

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] + " ");
     }
   }
}
Producción

Hex String : 2f4a33
Byte Array : 47 74 51 

Enfoque 2: uso de la representación de array de bytes de BigInteger en Java

En este enfoque, utilizaremos el método toByteArray() de la clase BigInteger. Después de convertir el número hexadecimal a un valor entero usando el método parseInt(), nos queda convertir los números enteros a una array de bytes. Aquí viene el papel del método toByteArray() de la clase BigInteger que transformará los valores enteros en una array de bytes y la devolverá.

A continuación se muestra la implementación del enfoque anterior:

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] + " ");
    }
}
Producción

Hexadecimal String : 3b4a11
Byte Array : 59 74 17 

Enfoque 3: uso de operadores de desplazamiento bit a bit

Otra forma de convertir una string hexadecimal en una array de bytes es utilizar los operadores de desplazamiento binario de Java. Aquí se utiliza el operador de desplazamiento a la izquierda bit a bit «<<«. Para obtener el valor numérico del carácter en orden hexadecimal, se utiliza el método Character.digit() en Java.

A continuación se muestra la implementación del enfoque anterior:

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<ans.length;i++){
             System.out.print(ans[i]+" ");
        }
    }
}
Producción

Hex String : 1f3d44
Byte Array : 31 61 68 

Publicación traducida automáticamente

Artículo escrito por manastole01 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *