Saltar al contenido

Conversión de matriz de bytes a cadena hexadecimal en javascript

Solución:

Falta el relleno en la conversión hexadecimal. Querrás usar

function toHexString(byteArray) {
  return Array.from(byteArray, function(byte) {
    return ('0' + (byte & 0xFF).toString(16)).slice(-2);
  }).join('')
}

de modo que cada byte se transforme en exactamente dos dígitos hexadecimales. Su salida esperada sería 04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9

Utilizando map() no funcionará si la entrada es de un tipo como Uint8Array: el resultado de map() es también Uint8Array que no puede contener los resultados de la conversión de cadenas.

function toHexString(byteArray) {
  var s="0x";
  byteArray.forEach(function(byte) {
    s += ('0' + (byte & 0xFF).toString(16)).slice(-2);
  });
  return s;
}

Una alternativa más concisa y eficaz (consulte https://jsperf.com/byte-array-to-hex-string) usando Array.reduce ():

function toHexString(byteArray) {
  return byteArray.reduce((output, elem) => 
    (output + ('0' + elem.toString(16)).slice(-2)),
    '');
}

(También sin “& 0xFF” porque, en mi opinión, si se pasa una matriz que contiene valores mayores que 255, la salida debe estar desordenada, para que el usuario pueda ver más fácilmente que su entrada fue incorrecta).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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