Hoe converteer ik binaire string naar decimaal?

Ik wil een binaire tekenreeks converteren naar een cijfer
Bijv.

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

Antwoord 1, autoriteit 100%

De functie parseIntconverteert tekenreeksen naar getallen, en er is een tweede argument voor nodig dat de basis specificeert waarin de tekenreeksrepresentatie is:

var digit = parseInt(binary, 2);

Zie het in actie.


Antwoord 2, autoriteit 9%

ES6 ondersteunt binaire numerieke literalsvoor gehele getallen, dus als de binaire tekenreeks onveranderlijk is, zoals in de voorbeeldcode in de vraag, zou men deze gewoon kunnen typen zoals het is met het voorvoegsel 0Bof 0B:

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

Antwoord 3, autoriteit 5%

Gebruik de parameter radixvan parseInt:

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

Antwoord 4, autoriteit 5%

parseInt()met radix is de beste oplossing (zoals door velen is verteld):

Maar als je het wilt implementeren zonder parseInt, is hier een implementatie:

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

Antwoord 5

var num = 10;
alert("Binary " + num.toString(2));   // 1010
alert("Octal " + num.toString(8));    // 12
alert("Hex " + num.toString(16));     // a
alert("Binary to Decimal " + parseInt("1010", 2));  // 10
alert("Octal to Decimal " + parseInt("12", 8));     // 10
alert("Hex to Decimal " + parseInt("a", 16));       // 10

Antwoord 6

Ik heb alles verzameld wat anderen hebben gesuggereerd en heb de volgende functie gemaakt die 3 argumenten heeft, het nummer en de basis waar dat nummer vandaan komt en de basis waarop dat nummer zal staan:

changeBase(1101000, 2, 10) => 104

Voer het codefragment uit om het zelf te proberen:

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>Examples: <br />
  <em>110, 2, 10</em> => <em>6</em>; (110)<sub>2</sub> = 6<br />
  <em>2d, 16, 10</em> => <em>45</em>; (2d)<sub>16</sub> = 45<br />
  <em>45, 10, 16</em> => <em>2d</em>; 45 = (2d)<sub>16</sub><br />
  <em>101101, 2, 16</em> => <em>2d</em>; (101101)<sub>2</sub> = (2d)<sub>16</sub>
</p>

Antwoord 7

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);
}

Antwoord 8

Een andere implementatie alleen voor het oefenen van functionele JS zou kunnen zijn

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

Antwoord 9

Enigszins aangepast conventioneel binair conversie-algoritme dat wat meer ES6-syntaxis en automatische functies gebruikt:

  1. Converteer binaire reeksreeks naar Array (ervan uitgaande dat dit nog niet het geval was)
    doorgegeven als array)

  2. Omgekeerde volgorde om de 0-index te forceren om te beginnen bij het meest rechtse binaire getal
    cijfer als binair wordt rechts-links berekend

  3. ‘reduce’ Array-functie doorkruist array en voert sommatie uit van
    (2^index) per binair cijfer [alleen als binair cijfer === 1] (0 digit
    levert altijd 0 op)

OPMERKING: Binaire conversieformule:

{waar d=binair cijfer, i=matrixindex, n=matrixlengte-1 (van rechts beginnend)}

n
∑ (d * 2^i)
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}).`);

Other episodes