Однажды мне пришлось прибегнуть к этому:
var bytes = [ 1, 0, 1, 0, 0, 0, 1, 0 ]
var integer = parseInt(bytes.join(''), 2)
Однако мне интересно, есть ли более оптимальный/правильный способ сделать это в JavaScript, а не преобразовывать его в строку и анализировать ее. В дополнение к вопросу, как сделать вышеописанное и превратить его в целое число, я также хотел бы знать, как превратить его в массив байтов. Что-то вроде этого:
var bytes = [ 1, 0, 1, 0, 0, 0, 1, 0 ]
var bytearray = new Uint8Array(bytes)
var integer = bytearray.toInteger()
это не работает таким образом, потому что ваш массив байтов представляет собой битовый массив.
Возможный дубликат Преобразовать двоичное представление числа из строки в int -Javascript



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Формула для преобразования двоичного массива байтов в целое число (псевдокод)
let power = 1;
var intVal = 0;
for (i = [interate from lowdigit to highdigit]) {
if (array[i]) intVal += power;
power *= 2;
}
И чем это лучше, чем parseInt(bytes.join(''), 2), который намного проще и интуитивно понятнее?
@IslamElshobokshy Я фактически удалил ответ с этим решением. Ответ: (а) решение parseInt работает только в том случае, если порядок младших и старших битов установлен правильно. (b) создание строки, а затем ее анализ создает как минимум 1 дополнительный объект (в зависимости от механизма javascript), а затем этот объект существует только для анализа. То, что я опубликовал, является подробным, но более эффективным и понятным (возможно) способом сделать это.
Возможно, вы могли бы использовать уменьшать(), это зациклится один раз в массиве (то, что вы уже делаете при вызове join() плюс накладные расходы на вызов parseInt()). Однако ваше решение короче.
var bits = [ 1, 0, 1, 0, 0, 0, 1, 0 ];
var integer = parseInt(bits.join(''), 2);
console.info("Your solution: " + integer);
var int = bits.reduce(
(a, bit, i, arr) => a + (bit ? Math.pow(2, arr.length - i - 1) : 0),
0
);
console.info("My solution: " + int);
Что вы подразумеваете под «массивом байтов»? Каков ожидаемый результат?