如何在JavaScript中将1和0的数组转换为ByteArray或Integer

时间:2019-02-06 14:06:46

标签: javascript arrays string integer byte

我不得不在某一点上这样做:

var bytes = [ 1, 0, 1, 0, 0, 0, 1, 0 ]
var integer = parseInt(bytes.join(''), 2)

但是,我想知道是否有比使用JavaScript更好/更合适的方法,而不是将其转换为字符串并进行解析。除了询问如何将其转换为 integer 之外,我还想知道如何将其转换为 bytearray 。像这样:

var bytes = [ 1, 0, 1, 0, 0, 0, 1, 0 ]
var bytearray = new Uint8Array(bytes)
var integer = bytearray.toInteger()

2 个答案:

答案 0 :(得分:1)

将二进制字节数组转换为整数的公式是(伪代码)

let power = 1;
var intVal = 0;
for (i = [interate from lowdigit to highdigit]) {
  if (array[i]) intVal += power;
  power *= 2;
}

答案 1 :(得分:1)

也许您可以使用reduce(),这将在数组上循环一次(调用join()时您已经做过的事情,再加上调用parseInt()的开销)。但是,您的解决方案更短。

var bits = [ 1, 0, 1, 0, 0, 0, 1, 0 ];
var integer = parseInt(bits.join(''), 2);

console.log("Your solution: " + integer);

var int = bits.reduce(
    (a, bit, i, arr) => a + (bit ? Math.pow(2, arr.length - i - 1) : 0),
    0
);

console.log("My solution: " + int);