Проверено ниже:
64-битное (8-байтовое) число с прямым порядком байтовArrayBuffer
байтов, как мы можем прочитать 64-битные целочисленные значения в JavaScript?
Я экспериментировал и придумал это, но есть ли более элегантное решение, учитывая, чтоDataView
пока не предоставляетgetUint64()
?
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