Tengo algunos datos binarios en un archivo que estoy leyendo (Hex):
00 00 00 18 66 74 79 70Leo el archivo y lo convierto en un arrayBuffer y tanto en Uint8Array como en Uint16Array.
const arrayBuffer = await selectedFile.arrayBuffer() const uint8Array = new Uint8Array(arrayBuffer) const uint16Array = new UInt16Array(arrayBuffer)El contenido de Uint8Array es el esperado:
Decimal Hex 0: 0 0 1: 0 0 2: 0 0 3: 24 18 4: 102 66 5: 116 74 6: 121 79 7: 112 70Pero en uint16Array los dos bytes están invertidos .
Decimal Hex What I expected as Hex 0: 0 0 0 1: 6144 18 00 00 18 2: 29798 74 66 66 74 3: 28793 70 79 79 70¿Por qué se invierten los dos bytes? ¿Qué puedo hacer para obtener el orden correcto si, por ejemplo, necesito buscar 0x6674.
El endianness del archivo (del formato de datos) es diferente al de su procesador.
Si le preocupa el endianness (y lo hace, si lee o escribe archivos destinados a ser utilizados en diferentes plataformas), no use un Uint16Array que siempre usa el orden de bytes de la plataforma, use un DataView en su lugar y llame al método getUint16 para cada índice.