Cómo leer un entero de 64 bits de un ArrayBuffer / DataView en JavaScript
Dado un little-endian de 64 bits (8 bytes)ArrayBuffer
de bytes, ¿cómo podemos leer valores enteros de 64 bits en JavaScript?
Experimenté y se me ocurrió esto, pero ¿existe una solución más elegante dado queDataView
aún no proporcionagetUint64()
?
const bytes = new Uint8Array([ 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff ]);
// [----- left -----] [---- right ----]
const view = new DataView(bytes.buffer);
// split 64-bit number into two 32-bit numbers
const left = view.getUint32(0, true); // 4294967295
const right = view.getUint32(4, true); // 4294967295
// combine the 2 32-bit numbers using max 32-bit val 0xffffffff
const combined = left + 2**32*right;
console.log('combined', combined);
// 18,446,744,073,709,552,000 is returned Javascript for "combined"
// 18,446,744,073,709,551,615 is max uint64 value
// some precision is lost since JS doesn't support 64-bit ints, but it's close enough