Подтвердить что ты не робот

Как преобразовать двоичную строку в десятичную?

Я хочу преобразовать двоичную строку в цифру Например

var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);

Как это возможно? Благодаря

4b9b3361

Ответ 1

Функция parseInt преобразует строки в числа и принимает второй аргумент, определяющий базу, в которой представлено строковое представление:

var digit = parseInt(binary, 2);

Посмотрите на действие.

Ответ 2

ES6 поддерживает двоичные числовые литералы для целых чисел, поэтому, если двоичная строка неизменна, как в примере кода в вопросе, можно просто введите его так же, как с префиксом 0b или 0b:

var binary = 0b1101000; // code for 104
console.log(binary); // prints 104

Ответ 3

parseInt() с radix - лучшее решение (как было сказано многими):

Но если вы хотите реализовать его без parseInt, вот реализация:

  function bin2dec(num){
    return num.split('').reverse().reduce(function(x, y, i){
      return (y === '1') ? x + Math.pow(2, i) : x;
    }, 0);
  }

Ответ 4

Используйте параметр radix parseInt:

var binary = "1101000";
var digit = parseInt(binary, 2);
console.log(digit);

Ответ 5

function binaryToDecimal(string) {
    let decimal = +0;
    let bits = +1;
    for(let i = 0; i < string.length; i++) {
        let currNum = +(string[string.length - i - 1]);
        if(currNum === 1) {
            decimal += bits;
        }
        bits *= 2;
    }
    console.log(decimal);
}

Ответ 6

Другая реализация только для функциональной JS-практики может быть

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));

Ответ 7

Я собрал все, что предложили другие, и создал следующую функцию, которая имеет 3 аргумента: номер и базу, из которой пришло это число, и базу, на которой будет происходить это число:

changeBase(1101000, 2, 10) => 104

Запустите фрагмент кода, чтобы попробовать его самостоятельно:

function changeBase(number, fromBase, toBase) {
                        if (fromBase == 10)
                            return (parseInt(number)).toString(toBase)
                        else if (toBase == 10)
                            return parseInt(number, fromBase);
                        else{
                            var numberInDecimal = parseInt(number, fromBase);
                            return (parseInt(numberInDecimal)).toString(toBase);
                    }
}

$("#btnConvert").click(function(){
  var number = $("#txtNumber").val(),
  fromBase = $("#txtFromBase").val(),
  toBase = $("#txtToBase").val();
  $("#lblResult").text(changeBase(number, fromBase, toBase));
});
#lblResult{
  padding: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="txtNumber" type="text" placeholder="Number" />
<input id="txtFromBase" type="text" placeholder="From Base" />
<input id="txtToBase" type="text" placeholder="To Base" />
<input id="btnConvert" type="button" value="Convert" />
<span id="lblResult"></span>

<p>Hint: <br />
Try 110, 2, 10 and it will return 6; (110)<sub>2</sub> = 6<br />

or 2d, 16, 10 => 45 meaning: (2d)<sub>16</sub> = 45<br />
or 45, 10, 16 => 2d meaning: 45 = (2d)<sub>16</sub><br />
or 2d, 2, 16 => 2d meaning: (101101)<sub>2</sub> = (2d)<sub>16</sub><br />
</p>

Ответ 8

Этот ответ исходит непосредственно из MDN и работает безупречно для всех чисел от -2147483648 до 2147483647. Представление представлено в форме 2 дополнения и вернет строку длиной 32. Просто используйте .slice(-6) или все, что вы хотите использовать для размера бита. Код MDN

function arrayFromMask(nMask) {
  // nMask must be between -2147483648 and 2147483647
  if (nMask > 0x7fffffff || nMask < -0x80000000) { 
    throw new TypeError('arrayFromMask - out of range'); 
  }
  for (var nShifted = nMask, aFromMask = []; nShifted; 
       aFromMask.push(Boolean(nShifted & 1)), nShifted >>>= 1);
  return aFromMask;
}

Ответ 9

Слегка измененный традиционный алгоритм двоичного преобразования, использующий еще несколько синтаксисов ES6 и автоматические функции:

  1. Преобразовать строку двоичной последовательности в массив (при условии, что это не было уже передается как массив)

  2. Обратная последовательность для принудительного запуска индекса 0 в крайнем правом бинарном файле разряд в двоичном виде вычисляется справа налево

  3. Функция 'массива' пересекает массив, выполняя суммирование (2 ^ индекс) на двоичную цифру [только если двоичная цифра === 1] (0 цифр всегда дает 0)

ПРИМЕЧАНИЕ: формула двоичного преобразования:

{где d = двоичная цифра, i = индекс массива, n = длина массива-1 (начиная справа)}

п
 ∑ (d * 2 ^ i)
= 0

let decimal = Array.from(binaryString).reverse().reduce((total, val, index)=>val==="1"?total + 2**index:total, 0);  

console.log('Converted BINARY sequence (${binaryString}) to DECIMAL (${decimal}).');