Programa Java para convertir una array de bytes en una string hexadecimal – Part 1

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.

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.

Declaración del problema: dada una array de bytes, la tarea es convertir la array de bytes en una string hexadecimal

Ejemplo: 

Input : byteArray = { 9, 2, 14, 10 }
Output: 9 2 E A

Input : byteArray = { 7, 12, 13, 127 }
Output: 7 C D 7F

La conversión de una array de bytes a una string hexadecimal implica cambiar una array de tipos de datos de bytes a su valor hexadecimal en forma de string. Existen numerosos enfoques para hacer lo mismo; algunos de ellos se enumeran a continuación.

Enfoques:

  • Uso del método Format() en Java
  • Uso de operadores de desplazamiento bit a bit
  • Usando el método predefinido en Integer/Long Class
  • Uso de la representación hexadecimal de BigInteger en Java

Enfoque 1:  uso del método Format() en Java

El método Java String Format() se puede utilizar para la conversión especificada. Para esto,

  1. Itere a través de cada byte en la array y calcule su equivalente hexadecimal.
  2. El string.format() se usa para imprimir el número de lugares de un valor hexadecimal y almacenar el valor en una string.
  3. %02X se usa para imprimir agregar dos espacios entre dos valores hexadecimales (de un hexadecimal (X)).

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

Java

// Java Program to convert byte
// array to hex string
  
// Approach 1 -  Using Format() Method in Java
  
import java.io.*;
  
public class GFG {
    public static void convertByteToHexadecimal(byte[] byteArray)
    {
        String hex = "";
  
        // Iterating through each byte in the array
        for (byte i : byteArray) {
            hex += String.format("%02X", i);
        }
  
        System.out.print(hex);
    }
  
    public static void main(String[] args)
    {
        byte[] byteArray = { 7, 12, 13, 127 };
        convertByteToHexadecimal(byteArray);
    }
}
Producción

070C0D7F

Enfoque 2: uso de operadores de desplazamiento bit a bit

En el enfoque anterior, si la array de bytes aumenta, el proceso se vuelve lento. Se utiliza una operación de bytes para convertir la array de bytes en un valor hexadecimal para aumentar la eficiencia.

Aquí se utiliza el operador de desplazamiento a la derecha sin signo «>>>» . Y, el método toCharArray() convierte la string dada en una secuencia de caracteres.

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

Java

// Java program to convert byte
// array to hex string
  
// Approach 2 - Using Bitwise Shift Operators
  
import java.io.*;
  
public class GFG {
    public static void
        convertByteToHexadecimal(byte[] byteArray)
    {
        int len = byteArray.length;
  
        // storing the hexadecimal values
        char[] hexValues = "0123456789ABCDEF".toCharArray();
        char[] hexCharacter = new char[len * 2];
  
        // using  byte operation converting byte
        // array to hexadecimal value
        for (int i = 0; i < len; i++) {
            int v = byteArray[i] & 0xFF;
            hexCharacter[i * 2] = hexValues[v >>> 4];
            hexCharacter[i * 2 + 1] = hexValues[v & 0x0F];
        }
  
        System.out.println(hexCharacter);
    }
  
    public static void main(String[] args)
    {
        byte[] bytes = { 9, 2, 14, 127 };
        convertByteToHexadecimal(bytes);
    }
}
Producción

09020E7F

Enfoque 3: uso del método predefinido en clase entera/larga

La clase Integer tiene el método toHexString() que convierte un número entero a su equivalente hexadecimal. Ahora necesitamos convertir la array de bytes en un número entero (para tamaño 4) o largo (para tamaño 8) y usar este método (ya que este método está presente en ambas clases, es decir, Integer y Long con el mismo nombre ). Para convertir una array de bytes en un número entero o largo, podemos usar el método de ajuste de la clase ByteBuffer.

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

Java

// Java program to convert byte
// array to hex string
  
// Approach 3 - Using the predefined method 
// in Integer/Long Class
  
import java.io.*;
// Importing packages to use wrap methods 
// of ByteBuffer Class
import java.nio.*;
  
public class GFG {
    public static String toHexadecimal(byte[] bytes)
    {
        StringBuilder result = new StringBuilder();
  
        for (byte i : bytes) {
            int decimal = (int)i & 0XFF;
            String hex = Integer.toHexString(decimal);
  
            if (hex.length() % 2 == 1) {
                hex = "0" + hex;
            }
  
            result.append(hex);
        }
        return result.toString();
    }
  
    public static void main(String[] args)
    {
        byte[] byteArray = { 9, 2, 14, 127 };
        System.out.println(toHexadecimal(byteArray));
    }
}
Producción

09020e7f

Enfoque 4: uso de la representación hexadecimal de BigInteger en Java

El uso de la representación hexadecimal de la clase BigInteger en Java es una forma evitable de convertir una array de bytes en una string hexadecimal debido a su baja velocidad. Aquí también se puede observar que dado que tratamos con números y no con strings de bytes arbitrarias, esto puede omitir los ceros iniciales en los casos.

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

Java

// Java program to convert byte
// array to hex string
  
// Approach 4 - Using Hexadecimal Representation
// of BigInteger in Java
  
import java.io.*;
// Importing the BigInteger class
import java.math.BigInteger;
  
public class GFG {
    public static void toHexString(byte[] byteArray)
    {
        // Printing the hexadecimal equivalent as string
        // representation from the BigInteger class.
        System.out.print(
            new BigInteger(1, byteArray).toString(16));
    }
  
    public static void main(String[] args)
    {
        byte[] byteArray = { 17, 2, 14, 127 };
        toHexString(byteArray);
    }
}
Producción

11020e7f

Publicación traducida automáticamente

Artículo escrito por sayantanbose2001 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 *