2012-04-21 15 views

Odpowiedz

92

funkcji parseInt zamienia ciągi do liczb, a to trwa drugi argument określający podstawy, w którym reprezentacja ciąg jest:

var digit = parseInt(binary, 2); 

See it in action.

+1

Czy to nadal ma znaczenie? 'parseInt (101, 2)' zwraca '5'. – srph

+4

@srph: To nie jest zaskakujące, 101 w bazie 2 ma 5 w bazie 10. – Jon

+1

Ah, rozumiem. Musiałem źle zrozumieć to, co "parsent". Myślałem, że skonwertuje łańcuch z podstawy 10 -> cokolwiek (myśląc, że 'parseInt ('5612', 2)' zwróci swoją binarną formę;). – srph

8

Użyj parametru radix z parseInt:

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

parseInt() z radix jest najlepszym rozwiązaniem (jak powiedziano przez wielu):

Ale jeśli chcesz, aby wdrożyć go bez parseInt, tutaj jest realizacja:

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

ES6 obsługuje binary numeric literals dla liczb całkowitych, więc jeśli ciąg binarny jest niezmienna , Tak jak w przykładzie kodu w pytaniu, można po prostu wpisać go w jak to jest z prefiksem 0b lub 0B:

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

Kolejna realizacja dla funkcjonalnego JS praktykowania może być

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c) 
 
console.log(bin2int("101010"));
Gdzie +c coerces String wpisz c na wartość typu Number dla prawidłowego dodania.

Powiązane problemy