sat*_*ish 7 javascript arrays division bigint uint8array
我正在使用浏览器内的Javascript,而不是NodeJS.我有两个Uint8Arrays ......
var d1 = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255])
var d2 = new Uint8Array([255, 255, 255, 255, 237, 49, 56, 0])
Run Code Online (Sandbox Code Playgroud)
每个元素都有8个元素,整数在0到255之间.每个数组代表一个更大的数字.例如,第一个数组表示正整数
0xffffffff
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将d1除以d2得到结果?我读到Javascript中一个整数的最大值是2 ^ 53,我相信它比我可以拥有的最大数字少.我不关心结果的对象类型是什么,但是Uint8Array很好.
您可以使用一个名为 BigInteger 的库.. https://www.npmjs.com/package/big-integer
我没有看到使用 Uint8Array 的内置方法,但我发现这个 -> Javascript ArrayBuffer to Hex有一种方法可以转换为十六进制,bigInteger 似乎可以。
所以这里是一个使用它的例子。->
var d1 = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255]);
var d2 = new Uint8Array([255, 255, 255, 255, 237, 49, 56, 0]);
function buf2hex(buffer) { // buffer is an ArrayBuffer
return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}
var bd1 = bigInt(buf2hex(d1), 16);
console.log(`value 1 = ${bd1.toString()}`);
var bd2 = bigInt(buf2hex(d2), 16);
console.log(`value 2 = ${bd2.toString()}`);
var r = bd1.divmod(bd2);
console.log(`result ${r.quotient.value} remainder ${r.remainder.value}`);Run Code Online (Sandbox Code Playgroud)
<script src="https://peterolson.github.io/BigInteger.js/BigInteger.min.js"></script>Run Code Online (Sandbox Code Playgroud)