Parte del código en este artículo está extraído de Internet y se organiza ligeramente para convertir entre bytes y hexadecimales.
/** * Referencia Apache Commons <a * href = "http://commons.apache.org/codec/"> http://commons.apache.org/codec/ </a> * Byte ocupa 8 bits, y los personajes hexadecimales ocupan 4 bits. Por lo tanto, un byte se puede convertir en dos caracteres hexadecimales correspondientes, es decir, los 4 y 4 bits altos de byte se convierten en los caracteres hexadecimales correspondientes H y L respectivamente, y se combinan. Lo mismo se aplica a la transformación opuesta. **/public class Hex {/*** Salida para establecer caracteres hexadecimales*/private static final char [] digits_lower = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; / *** Salida para establecer caracteres hexadecimales*/ private static final char [] digits_lower = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', ',', 'c', 'd', 'e', 'f'}; /*** Convierta una matriz de bytes a una matriz de personajes hexadecimales. * * Debido a que se usan dos caracteres para representar un byte, la longitud de char [] devuelta será el doble de la longitud del byte de parámetro []. * * @param data * byte [] solía convertirse en caracteres hex * @return char [] que contiene caracteres hexadecimales */ public static char [] encodeHex (byte final [] data) {return codex (data, true); } /*** Convierta una matriz de bytes a una matriz de personajes hexadecimales. * * Debido a que se usan dos caracteres para representar un byte, la longitud de char [] devuelta será el doble de la longitud del byte de parámetro []. * * @param data * byte [] para convertir a caracteres hexadecimales * @param tolowercase * <code> true </code> transferir a formato minúscula, <code> false </code> transferir al formato upcase * @return char [] que contiene caracteres hex */public static char [] codex (datos finales [] datos, datos finales de boolwercase) {devolución encododehex (datos, tolower, tolower, tolower, tolowers? Digits_lower: digits_upper); } /*** Convierta una matriz de bytes a una matriz de personajes hexadecimales. * * Debido a que se usan dos caracteres para representar un byte, la longitud de char [] devuelta será el doble de la longitud del byte de parámetro []. * * @param data * byte [] para convertir a caracteres hexadecimales * @param Todigits * Alphabet para controlar la salida * @return char [] que contiene caracteres hexadecimales */ protegido static char [] codex (data de byte final [], char [] tdigits) {int l = data.length; char [] out = new Char [l << 1]; // Dos caracteres forman el valor hexadecimal. for (int i = 0, j = 0; i <l; i ++) {out [j ++] = Todigits [(0xf0 & data [i]) >>> 4]; out [j ++] = Todigits [0x0f & data [i]]; } regresar; } /*** Convierta una matriz de bytes a una cadena hexadecimal. * * Debido a que se usan dos caracteres para representar un byte, la longitud de la cadena devuelta será el doble de la longitud del byte del parámetro []. * * @param data * byte [] para convertir a caracteres hex * @return hex string */ public static string codeDhexStr (final byte [] data) {return codeDexStr (data, true); } /*** Convierta una matriz de bytes a una cadena hex. * * Debido a que se usan dos caracteres para representar un byte, la longitud de la cadena devuelta será el doble de la longitud del byte del parámetro []. * * @param data * byte [] para convertir a caracteres hexadecimales * @param tolowercase * <code> true </code> transferir al formato minúscula, <code> false </code> transferir al formato uppercase * @return hexString */public static string encodeHexstr (byte [] data, data, tolower) {devuelve encodedexstr (data, thing static encodeStr (byte [] data, data, tolower) Digits_upper); } /*** Convierta una matriz de bytes a una cadena hex. * * Debido a que se usan dos caracteres para representar un byte, la longitud de la cadena devuelta será el doble de la longitud del byte del parámetro []. * * @param data * byte [] para convertir en caracteres hex * @param Todigits * Alphabet para controlar la salida * @return hex string */ proteged static string encodeHexstr (byte [] data, char [] Todigits) {return New String (codeDex (datos, aDigits)); } / ** * Convierta la matriz de caracteres hexadecimales a la matriz de bytes * * @param data * hex char [] * @return byte [] * @throws runtimeException * Si la longitud de la matriz de caracteres hex de origen es un número impar, se lanzará una excepción de tiempo de ejecución * / public static byte [] decodehex (char [] data) {int len. if ((len & 0x01)! = 0) {tire nueva runtimeException ("número impar de caracteres"); } // Un byte corresponde a dos caracteres hexadecimales, establezca el tamaño del byte [] en la mitad del tamaño de char [] byte [] out = new Byte [len >> 1]; // Dos caracteres forman el valor hexadecimal. for (int i = 0, j = 0; j <len; i ++) {int f = Todigit (data [j], j) << 4; j ++; F = F | Todigit (datos [j], j); j ++; out [i] = (byte) (f & 0xff); } regresar; } /*** Convierta los caracteres hexadecimales en un entero. * * @param ch * caracteres que se convertirán en enteros * @param índice * La posición del carácter en la matriz de caracteres * @return un entero * @throws runtimeException * Cuando CH no es un carácter hexadecimal legal, lanza esta excepción */ protegido int toDigit (final Chch, final int index) {final int digit = carácter. Digit (16); if (digit == -1) {lanzar nueva runtimeException ("carácter hexadecimal ilegal" + ch + "en índice" + index); } DIGIT DE RETURN; } public static void main (string [] args) {string srcstr = "helloworld!"; Cadena encodestr = encodeHexstr (srcstr.getBytes (), falso); String decodestr = new String (decodeHex (encodestr.toCarArray ())); System.out.println ("String String:" + Srcstr); System.out.println ("Estándar codificado como Hex:" + encodestr); System.out.println ("hexadecimal decodificado como cadena:" + decodestr); }}