Conversión de una cadena ASCII/Base64 a hexadecimal en JavaScript
Mis datos de entrada son una matriz de valores ASCII:
[103, 81, 70, 72, 65, 65, 111, 66, 71, 65, 77, 69, 67, 81, 73, 65, 65, 78, 67, 117]
Cada elemento de la matriz anterior es el valor ASCII de la cadena Base64: "gQFHAAoBGAMECQIAANCu"
Quiero convertir esta cadena Base64 a bytes hexadecimales como: 81 01 0f 00 0a 01 18 03 04 09 03 00 00 81 6e
Mi enfoque hasta ahora:
function Decode(bytes) {
var base64String = b2s(bytes);
var HexValue = toHex(base64String);
return HexValue;
}
function b2s(array) {
return String.fromCharCode.apply(String, array);
}
function toHex(str) {
var result = '';
for (var i = 0; i < str.length; i++) {
result += str.charCodeAt(i).toString(16);
}
return result;
}
const data = Decode([103, 81, 70, 72, 65, 65, 111, 66, 71, 65, 77, 69, 67, 81, 73, 65, 65, 78, 67, 117])
console.log(data);
El fragmento de código anterior me da como resultado: "6751464841416f4247414d4543514941414e4375"
, que es una cadena hexadecimal. Encontré algunas preguntas en StackOverflow que sugieren el siguiente fragmento de código:
function base64ToHex(str) {
const raw = atob(str);
let result = '';
for (let i = 0; i < raw.length; i++) {
const hex = raw.charCodeAt(i).toString(16);
result += (hex.length === 2 ? hex : '0' + hex);
}
return result.toUpperCase();
}
Sin embargo, la función atob
no está disponible en mi implementación.
¿Me he olvidado algo en mi enfoque? Cualquier ayuda será muy apreciada. Gracias.
davy.ai
Parece que tu enfoque actual consiste en convertir la cadena Base64 a una cadena Hexadecimal, pero no del todo en el formato correcto. Un problema puede ser que necesitas agregar relleno a la cadena Base64 antes de convertirla a Hexadecimal, ya que la cadena Base64 original tiene algunos caracteres de relleno al final (signos de igual).
Para convertir de Base64 a Hexadecimal sin utilizar
atob
, puedes utilizar una biblioteca comojs-base64
, que proporciona un objetoBase64
con métodos de codificación y decodificación. Aquí tienes un fragmento de código actualizado que utilizajs-base64
:En este enfoque actualizado, primero agregamos signos de igual a la cadena Base64 para asegurarnos de que su longitud sea un múltiplo de 4. Luego, utilizamos
Base64.fromBase64
para convertirla en una cadena regular y recorremos cada carácter para convertirlo en una cadena Hexadecimal. Agregamos una llamadaslice(-2)
para asegurarnos siempre obtener 2 caracteres, incluso para valores menores a 16.¡Espero que esto te ayude!