2012-04-21 3 views

ответ

92

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

var digit = parseInt(binary, 2); 

See it in action.

+1

Это еще актуально? 'parseInt (101, 2)' возвращает '5'. – srph

+4

@srph: Это неудивительно, 101 в базе 2 - 5 в базе 10. – Jon

+1

А, я вижу. Я, должно быть, неправильно понял, что такое 'parseInt'. Я думал, что он преобразует строку из базы 10 -> независимо (думая, что 'parseInt ('5612', 2)' вернет свою двоичную форму;). – srph

8

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

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

parseInt() с поразрядной является лучшим решением (как было сказано много):

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

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

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

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

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

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c) 
 
console.log(bin2int("101010"));
, где +c принуждает String тип c к значению Number для правильного добавления.

Смежные вопросы