I want to convert binary string in to digit E.g
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
How is it possible? Thanks
This question is related to
javascript
node.js
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
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);
}
Slightly modified conventional binary conversion algorithm utilizing some more ES6 syntax and auto-features:
Convert binary sequence string to Array (assuming it wasnt already passed as array)
Reverse sequence to force 0 index to start at right-most binary digit as binary is calculated right-left
'reduce' Array function traverses array, performing summation of (2^index) per binary digit [only if binary digit === 1] (0 digit always yields 0)
NOTE: Binary conversion formula:
{where d=binary digit, i=array index, n=array length-1 (starting from right)}
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}).`);
parseInt()
with radix is a best solution (as was told by many):
But if you want to implement it without parseInt, here is an implementation:
function bin2dec(num){
return num.split('').reverse().reduce(function(x, y, i){
return (y === '1') ? x + Math.pow(2, i) : x;
}, 0);
}
I gathered all what others have suggested and created following function which has 3 arguments, the number and the base which that number has come from and the base which that number is going to be on:
changeBase(1101000, 2, 10) => 104
Run Code Snippet to try it yourself:
function changeBase(number, fromBase, toBase) {_x000D_
if (fromBase == 10)_x000D_
return (parseInt(number)).toString(toBase)_x000D_
else if (toBase == 10)_x000D_
return parseInt(number, fromBase);_x000D_
else{_x000D_
var numberInDecimal = parseInt(number, fromBase);_x000D_
return (parseInt(numberInDecimal)).toString(toBase);_x000D_
}_x000D_
}_x000D_
_x000D_
$("#btnConvert").click(function(){_x000D_
var number = $("#txtNumber").val(),_x000D_
fromBase = $("#txtFromBase").val(),_x000D_
toBase = $("#txtToBase").val();_x000D_
$("#lblResult").text(changeBase(number, fromBase, toBase));_x000D_
});
_x000D_
#lblResult{_x000D_
padding: 20px;_x000D_
}
_x000D_
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>_x000D_
<input id="txtNumber" type="text" placeholder="Number" />_x000D_
<input id="txtFromBase" type="text" placeholder="From Base" />_x000D_
<input id="txtToBase" type="text" placeholder="To Base" />_x000D_
<input id="btnConvert" type="button" value="Convert" />_x000D_
<span id="lblResult"></span>_x000D_
_x000D_
<p>Hint: <br />_x000D_
Try 110, 2, 10 and it will return 6; (110)<sub>2</sub> = 6<br />_x000D_
_x000D_
or 2d, 16, 10 => 45 meaning: (2d)<sub>16</sub> = 45<br />_x000D_
or 45, 10, 16 => 2d meaning: 45 = (2d)<sub>16</sub><br />_x000D_
or 2d, 2, 16 => 2d meaning: (101101)<sub>2</sub> = (2d)<sub>16</sub><br />_x000D_
</p>
_x000D_
FYI: If you want to pass 2d as hex number, you need to send it as a string so it goes like this:
changeBase('2d', 16, 10)
Another implementation just for functional JS practicing could be
var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)_x000D_
console.log(bin2int("101010"));
_x000D_
+c
coerces String
type c
to a Number
type value for proper addition.
ES6 supports binary numeric literals for integers, so if the binary string is immutable, as in the example code in the question, one could just type it in as it is with the prefix 0b
or 0B
:
var binary = 0b1101000; // code for 104
console.log(binary); // prints 104
Source: Stackoverflow.com