我想将二进制字符串转换为数字Eg
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
这怎么可能?谢谢
我想将二进制字符串转换为数字Eg
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
这怎么可能?谢谢
Answers:
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);
}
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
我收集了所有其他建议,并创建了以下函数,该函数具有3个参数,数字和该数字来自的基数以及该数字将要使用的基数:
changeBase(1101000, 2, 10) => 104
运行代码片段以亲自尝试:
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)
使用一些更多的ES6语法和自动功能对常规二进制转换算法进行了略微修改:
将二进制序列字符串转换为数组(假设它尚未作为数组传递)
反向序列强制0索引从最右边的二进制数字开始,因为二进制是从右向左计算的
'reduce'数组函数遍历数组,对每个二进制位执行(2 ^ index)求和[仅当二进制位=== 1时](0位始终产生0)
注意:二进制转换公式:
{其中d =二进制数字,i =数组索引,n =数组长度1(从右开始)}
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(101, 2)返回5。