javascript - ¿Por qué map sobre Uint8Array se comporta de manera extraña?
Estoy intentando obtener el tipo MIME del búfer de imagen o ArrayBuffer. Pero me estoy enfrentando a un problema extraño.
Estoy usando el siguiente código para convertir los bytes de la firma a una cadena hexadecimal.
const uint8Array = new Uint8Array([137, 80, 78, 71]);
const signatureLength = 4;
const signature1 = uint8Array.slice(0, signatureLength).map(byte => {
const signature = byte.toString(16).padStart(2, "0");
console.log("signature --- ", signature, byte, typeof signature);
return signature;
});
const signature = signature1.join("").toUpperCase();
console.log("signature 1 --- ", signature1, signature);Como puedes ver en la salida de la consola, 78 en realidad se convierte en '4e', pero en el resultado del mapa se guarda como 0. Este comportamiento parece muy extraño. ¿Qué está pasando aquí?
Respuesta #1
Uint8Array no es un array regular. TypedArray.prototype.map() no devuelve un array de valores transformados, en su lugar devuelve otro TypedArray del mismo tipo.
Esto está haciendo que el mapa convierta '4e' en 0.
La solución es usar Array.from(slicedArray);