Как преобразовать двоичное представление числа из строки в целое число в JavaScript?

Кто-нибудь может дать мне небольшой совет, пожалуйста?

У меня есть строка, например "01001011", и мне нужно перевернуть ее, поэтому я использовал .split('') не .reverse() и теперь мне нужно прочитать массив как строку и преобразовать его в целое число. Является ли это возможным?

Спасибо

Ответ 1

Если вы хотите преобразовать массив обратно в строку, используйте join() (MDN) и для преобразования строки в целое число parseInt() (MDN). Второй аргумент более позднего является необязательным основанием.

JavaScript попытается определить, какой радикал использовать, но чтобы быть уверенным, что вы всегда должны добавлять свой radix вручную. Цитирование из MDN:

Если radix равен undefined или 0, JavaScript предполагает следующее:

  • Если входная строка начинается с "0x" или "0X", радиус равен 16 (шестнадцатеричный).

  • Если входная строка начинается с "0", радиус равен восьми (восьмеричный). Эта функция нестандартна, и некоторые реализации намеренно не поддерживают ее (вместо этого используют radix 10). По этой причине всегда указывайте radix при использовании parseInt.

  • Если начальная строка начинается с любого другого значения, то радиус равен 10 (десятичный).

Итак, в вашем случае должен работать следующий код:

var a = '01001011';

var b = parseInt( a.split('').reverse().join(''), 2 );

или просто (если вы хотите преобразовать начальную строку без изменения):

var b = parseInt( a, 2 );

Ответ 2

Просто вызовите parseInt с другим основанием, в этом случае используйте для двоичного кода 2.

var a = parseInt("01001011", 2);
// a === 75

parseInt пытается определить сам основатель, если вы явно не указали его. Из сети разработчиков Mozilla:

Если radix равен undefined или 0, JavaScript предполагает следующее:

  • Если вход string начинается с "0x" или "0X", то основание равно 16 (шестнадцатеричное).
  • Если вход string начинается с "0", то радиус равен восьми (восьмеричный). Эта функция нестандартна, и некоторые реализации намеренно не поддерживают ее (вместо этого используют radix 10). По этой причине всегда указывать радиус при использовании parseInt.
  • Если вход string начинается с любого другого значения, радиус равен 10 (десятичный).

В этом случае очень важно, чтобы вы указали радиус, поскольку в противном случае его можно интерпретировать как десятичное или восьмеричное число. Как правило, всегда указывайте радиус.

Ответ 3

Это займет шестнадцатеричный буфер и преобразует его в двоичную строку и обратно в шестнадцатеричный буфер.

ПРИМЕЧАНИЕ: когда я говорю шестнадцатеричный буфер, я имею в виду десятичное значение, потому что, когда вы перебираете буфер и вытягиваете каждый элемент в массиве, он дает десятичное значение (например: 210 вместо d2).

var buffer - new Buffer([0, 210, 242]); // Node

// var arrayBuffer = new ArrayBuffer(3); // JavaScript

// var uint8 = new Uint8Array(arrayBuffer); // JavaScript/ 16Array, 32Array, etc

Нужно знакомиться с буферами

Вы будете перебирать буфер с помощью for(){}, и внутри вы можете сделать что-то вроде:

(210).toString(2); // '11010010'

(210).toString(16); // 'd2' (untested)

(210).toString(8); // (Octal-Digits representation)

parseInt((210).toString(2), 2); // 210

parseInt((210).toString(2), 2).toString(16); // 'd2'

Очевидно, вместо использования "(210).toString(2)" IN YOU FOR LOOP вы должны использовать "(buffer[i]).toString(2)"

Endian Rep зависит от вас!:) (array.reverse())

Надеюсь, это поможет!

PS. parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2

parseInt((210).toString(2).substring(5, 8), 2); // 2