Supongamos que tengo una cadena codificada en base64 y quiero convertirla en un ArrayBuffer , puedo hacerlo de esta manera:
// base64 decode the string to get the binary data const binaryString = window.atob(base64EncodedString); // convert from a binary string to an ArrayBuffer const buf = new ArrayBuffer(binaryString.length); const bufView = new Uint8Array(buf); for (let i = 0, strLen = binaryString.length; i < strLen; i++) { bufView[i] = binaryString.charCodeAt(i); } // get ArrayBuffer: `buf`Desde String.protoptype.charCodeAt() , devolverá un número entero entre 0 y 65535 que representa la unidad de código UTF-16 en el índice dado. Pero el valor de rango de Uint8Array es [0, 255].
Inicialmente estaba pensando que el punto de código que obtuvimos de charCodeAt() podría salirse del límite del rango de Uint8Array . Luego revisé la función atob() incorporada, que devuelve una cadena ASCII que contiene datos decodificados. De acuerdo con Binary Array , la cadena ASCII tiene un rango de 0 a 127, que está incluido en el rango de Uint8Array , y es por eso que estamos seguros de usar charCodeAt() en este caso.
Ese es mi entendimiento. No estoy seguro si interpreto esto correctamente. ¡Gracias por tu ayuda!
Así que parece que mi comprensión es correcta.
Gracias a @Konrad, y aquí está su resumen:
charCodeAt está diseñado para admitir utf-16. Y utf-16 fue diseñado para ser compatible con ASCII, por lo que los primeros 256 caracteres tienen valores exactos como en la codificación ASCII.