JS: создание битового массива

284
05 марта 2017, 08:12

Допустим, есть массив нескольких байт. Как из них сделать битовый массив?

Answer 1

Можно выделять биты с помощью битовых масок:

let input = [0x00, 0x0F, 0xF0, 0xFF]; 
// Построим маски 
let arr8 = new Array(8).fill(0); 
let masks = arr8.map((_, i) => 1 << i); 
// bool биты 
let boolbits = input.map(byte => masks.map(mask => !!(byte & mask))); 
// char биты 
let charbits = input.map(byte => masks.map(mask => byte & mask?'1':'0')); 
// int биты 
let intbits = input.map(byte => masks.map(mask => byte & mask ? 1 : 0).reverse()).reduce((a, b) => a.concat(b), []) 
 
console.log(charbits.map(byte => byte.reverse().join(''))); 
console.log(JSON.stringify(intbits))

Можно с помощью сдвига:

let input = [0x00, 0x0F, 0xF0, 0xFF]; 
 
let bits = input.map(byte => { 
  let bits = []; 
  for (let i = 0; i < 8; i++) { 
    bits.unshift(byte & 1); // В этот раз изменим порядок, младший бит будет последним 
    byte = byte >> 1; 
  } 
  return bits; 
}); 
 
// Можно собрать все биты в один массив 
let result = bits.reduce((c, a) => c.concat(a)); 
console.log(result);

READ ALSO
Зачем нужен Object.prototype?

Зачем нужен Object.prototype?

Не могу понять, зачем в данной функции использовать Objectprototype для того, чтобы проверить input и определить String ли это? В чем разница использования...

250
Запуск видео в iframe

Запуск видео в iframe

На сайте есть слайдер, который отображает видео, приходящее из сторонник сервисов (YouTube, vimeo), загружаемое в iframeМне нужно прокрутить слайдер...

490
Нужна помощь с ES6 модулями

Нужна помощь с ES6 модулями

Написал небольшую библиотеку и теперь пытаюсь перевести её на ES6 но и сделать версию для обычного использования, чтобы просто подключить...

272
Проблемы с элементом &lt;track&gt;

Проблемы с элементом <track>

Всем привет! Вообщем не могу понять как сделать так чтобы когда наводишь мышку на субтитры в видео, то они передаются в переменнуюИспользую...

263