Teniendo que lidiar con muchos formatos de encabezado de archivos, es decir, bmp, tiff, wav, mp3, etc. Desarrollé algunas rutinas básicas para manejarlos. Me preguntaba si había una mejor manera? Tampoco tratan con valor firmado ni flotante.
function Read2BytesToUWord (ThisArray, Offset, UseLittleEndian){ let ThisWord = 0; if(UseLittleEndian){ ThisWord |= ThisArray[Offset + 1].charCodeAt() << 8; ThisWord |= ThisArray[Offset + 0].charCodeAt(); } else { ThisWord = ThisArray[Offset + 0].charCodeAt(); ThisWord |= ThisArray[Offset + 1].charCodeAt() << 8; } return Number((ThisWord)); } function Read4BytesToUDWord (ThisArray, Offset, UseLittleEndian){ let ThisDWord = 0; if(UseLittleEndian){ ThisDWord = ThisArray[Offset + 3].charCodeAt() << 24; ThisDWord |= ThisArray[Offset + 2].charCodeAt() << 16; ThisDWord |= ThisArray[Offset + 1].charCodeAt() << 8; ThisDWord |= ThisArray[Offset + 0].charCodeAt(); } else { ThisDWord = ThisArray[Offset + 3].charCodeAt(); ThisDWord |= ThisArray[Offset + 2].charCodeAt() << 8; ThisDWord |= ThisArray[Offset + 1].charCodeAt() << 16; ThisDWord |= ThisArray[Offset + 0].charCodeAt() << 24; } return Number((ThisDWord)); } function ReadBytesToString (ThisArray, Offset, ThisLen){ let ThisStr = ""; for(let Indx = 0; Indx < ThisLen; Indx++){ ThisStr += (ThisArray[Offset + Indx]); } return ThisStr; }