我知道JavaScript不能精确地表示所有64位整数。但是它可以精确地表示大于32位的数字。这就是我所需要的。 JavaScript可以给我任何精度。
我有一个已知长度的字节数组。它具有1、2、4、8或16个字节。它可以包含有符号或无符号整数,我知道它是。数据是big-endian(网络字节顺序)。
如何从该字节数组中获取数字值?
有些简单的隔离会因负数而完全失效。超过32位的DataView毫无帮助。我对一个不错的,简单且可取的高效纯JavaScript解决方案感兴趣。在我可见的网络部分,似乎没有任何解决方案。
万一有人想看错代码,这是我的正数版本:
function readInt(array) {
var value = 0;
for (var i = array.length - 1; i >= 0; i--) {
value = (value * 256) + array[i];
}
return value;
}
答案 0 :(得分:0)
This page解释了一个很好而简单的解决方案:
我的代码在更大的范围内工作,该范围具有一个数组和一个要读取的pos。
function readInt(size) { var value = 0; var first = true; while (size--) { if (first) { let byte = array[pos++]; value += byte & 0x7f; if (byte & 0x80) { value -= 0x80; // Treat most-significant bit as -2^i instead of 2^i } first = false; } else { value *= 256; value += array[pos++]; } } return value; }
array
(Uint8Array
)中提供了原始字节,pos
是下一个要读取的索引。该功能从当前的pos
开始读取,并在读取pos
字节之一时前进size
。