Как преобразовать массив из 1 и 0 в ByteArray или Integer в JavaScript - PullRequest
0 голосов
/ 06 февраля 2019

Мне пришлось прибегнуть к этому в один момент:

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

Однако мне интересно, есть ли более оптимальный / правильный способ сделать это в JavaScript, а не преобразовывать его в строку иразбор это.Помимо вопроса о том, как сделать вышеупомянутое и превратить его в целое число , я также хотел бы знать, как превратить его в bytearray .Как то так:

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Возможно, вы могли бы использовать redu () , это будет один раз зацикливаться на массиве (то, что вы уже делаете при вызове 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);
0 голосов
/ 06 февраля 2019

Формула для преобразования двоичного байтового массива в целое число (псевдокод)

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