在Javascript(但不是Node)中,如何分割两个Uint8Arrays?

我正在使用浏览器内的 Javascript,而不是NodeJS.我有两个Uint8Arrays ……
var d1 = new Uint8Array([255,255,255])
var d2 = new Uint8Array([255,237,49,56,0])

每个元素都有8个元素,整数在0到255之间.每个数组代表一个更大的数字.例如,第一个数组表示正整数

0xffffffff

我的问题是如何将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]);
var d2 = new Uint8Array([255,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}`);
<script src="https://peterolson.github.io/BigInteger.js/BigInteger.min.js"></script>

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面