javascript - كيفية تحويل سلسلة ثنائية إلى عشري؟




node.js (5)

استخدم معلمة radix من parseInt :

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

أريد تحويل سلسلة ثنائية في الأرقام على سبيل المثال

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

كيف يكون ذلك ممكنا؟ شكر


تطبيق آخر فقط لممارسة JS الوظيفية يمكن أن يكون

var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));
حيث +c coerces اكتب String c إلى قيمة نوع Number للإضافة المناسبة.


جمعت كل ما اقترحه الآخرون وقاموا بإنشائه باتباع الدالة التي تحتوي على ثلاث حجج وعددها والقاعدة التي جاء منها هذا العدد والقاعدة التي سيكون عليها هذا الرقم:

changeBase(1101000, 2, 10) => 104

تشغيل Code Snippet لتجربته بنفسك:

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>

لمعلوماتك: إذا كنت تريد تمرير 2d كرقم سداسي عشري ، فستحتاج إلى إرسالها كسلسلة حتى تسير على هذا changeBase('2d', 16, 10) : changeBase('2d', 16, 10)


يدعم ES6 القيم الحرفية الرقمية للأعداد الصحيحة ، لذلك إذا كانت السلسلة الثنائية غير قابلة للتغيير ، كما هو الحال في كود المثال في السؤال ، يمكن كتابة ما هو عليه فقط كما في البادئة 0b أو 0B :

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

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




node.js