Tengo una variable int16 (2 bytes) y una variable int32 (4 bytes). Y quiero empaquetar estas dos variables en la matriz de bytes js. Puedo hacerlo así:
<script> var int16_1 = 10; var int32_1 = 20; var buffer = new ArrayBuffer(8); var buf_1 = new Int16Array(buffer,0,1); var buf_2 = new Int32Array(buffer,4,1); buf_1[0]=int16_1; buf_2[0]=int32_1; console.log(buffer); </script>En este caso tengo salida:
ArrayBuffer(8) byteLength: 8 [[Prototype]]: ArrayBuffer [[Int8Array]]: Int8Array(8) 0: 10 1: 0 2: 0 <-extra use byte 3: 0 <-extra use byte 4: 20 5: 0 6: 0 7: 0Pero en este caso necesito usar 2 bytes adicionales.
Si trato de hacerlo:
<script> var int16_1 = 10; var int32_1 = 20; var buffer = new ArrayBuffer(6); var buf_1 = new Int16Array(buffer,0,1); var buf_2 = new Int32Array(buffer,2,1); buf_1[0]=int16_1; buf_2[0]=int32_1; console.log(buffer); </script>Tengo un error: Uncaught RangeError: el desplazamiento inicial de Int32Array debe ser un múltiplo de 4 en el nuevo Int32Array ()
Si trato de hacerlo:
<script> var int16_1 = 10; var int32_1 = 20; var buffer = new ArrayBuffer(6); var buf_1 = new Int16Array(buffer,0,1); var buf_2 = new Int32Array(buffer.slice(2),0,1); buf_1[0]=int16_1; buf_2[0]=int32_1; console.log(buffer); </script>Tengo una salida incorrecta:
ArrayBuffer(6) byteLength: 6 [[Prototype]]: ArrayBuffer [[Int8Array]]: Int8Array(6) 0: 10 1: 0 2: 0 3: 0 4: 0 5: 0¿Hay alguna forma de empaquetar datos de diferentes tamaños en una matriz de bytes sin un uso adicional de memoria?