Tengo esta cadena de bytes representada en hexadecimal:
const s = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00"Me gustaría convertirlo a Uint8Array para manipularlo aún más.
¿Cómo puede hacerse esto?
Actualizar:
La cadena binaria proviene del backend de python. En python puedo crear esta representación correctamente:
encoded = base64.b64encode(b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00')Dado que las cadenas de JavaScript admiten escapes \x , esto debería funcionar para convertir una cadena de bytes de Python en Uint8Array :
const s = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00"; const array = Uint8Array.from([...s].map(v => v.charCodeAt(0))); console.log(array);En Node.js, uno usa Buffer.from para convertir una cadena (codificada en base64) en un Buffer .
Si el argumento original es una cadena codificada en base64, como en Python:
const buffer = Buffer.from(encodedString, 'base64');Si es una cadena codificada en UTF-8:
const buffer = Buffer.from(encodedString); Los Buffer son instancias de Uint8Array , por lo que se pueden usar donde se espera un Uint8Array . Citando de los documentos:
La clase
Bufferes una subclase de la claseUint8Arrayde JavaScript y la amplía con métodos que cubren casos de uso adicionales. Las API de Node.js aceptanUint8Arraysimples siempre que también se admitanBuffer.
const s = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8bV23J15O4\xb14\xb1H61417KKLL\xb50L5U\x8a\x05\x00\xf6\xaa\x8e.\x1c\x00\x00\x00" //btoa(base64) - transforms base64 to ascii let str = btoa(s) let encoder = new TextEncoder() let typedarr = encoder.encode(str) //encode() returns Uint8Array console.log(typedarr)