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