Tôi muốn chuyển đổi chuỗi nhị phân thành chữ số Ví dụ:
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
Làm thế nào là nó có thể? Cảm ơn
Tôi muốn chuyển đổi chuỗi nhị phân thành chữ số Ví dụ:
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
Làm thế nào là nó có thể? Cảm ơn
Câu trả lời:
Các parseIntchức năng chuyển đổi xâu kí tự sang số, và phải mất một số thứ hai xác định cơ sở, trong đó đại diện chuỗi là:
var digit = parseInt(binary, 2);
parseInt. Tôi nghĩ rằng nó sẽ chuyển đổi chuỗi từ cơ số 10 -> bất cứ điều gì (suy nghĩ như thế parseInt('5612', 2)sẽ trả về dạng nhị phân của nó;).
ES6 hỗ trợ các ký tự số nhị phân cho số nguyên, vì vậy nếu chuỗi nhị phân là không thay đổi, như trong mã ví dụ trong câu hỏi, người ta có thể nhập nó vào như thế với tiền tố 0bhoặc 0B:
var binary = 0b1101000; // code for 104
console.log(binary); // prints 104
parseInt() với cơ số là một giải pháp tốt nhất (như nhiều người đã nói):
Nhưng nếu bạn muốn triển khai nó mà không cần parseInt, đây là cách triển khai:
function bin2dec(num){
return num.split('').reverse().reduce(function(x, y, i){
return (y === '1') ? x + Math.pow(2, i) : x;
}, 0);
}
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
Tôi đã tập hợp tất cả những gì người khác đã đề xuất và tạo ra hàm sau có 3 đối số, số và cơ số mà số đó đến và cơ số mà số đó sẽ là:
changeBase(1101000, 2, 10) => 104
Chạy đoạn mã để tự thử:
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>
FYI: Nếu bạn muốn chuyển 2d dưới dạng số hex, bạn cần gửi nó dưới dạng một chuỗi để nó diễn ra như sau:
changeBase('2d', 16, 10)
Một triển khai khác chỉ dành cho thực hành JS chức năng có thể là
var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));
+ccưỡng chế Stringnhập cmột Numbergiá trị kiểu để bổ sung thích hợp.
Thuật toán chuyển đổi nhị phân thông thường được sửa đổi một chút bằng cách sử dụng thêm một số cú pháp ES6 và các tính năng tự động:
Chuyển chuỗi chuỗi nhị phân thành Mảng (giả sử nó chưa được chuyển dưới dạng mảng)
Trình tự đảo ngược để buộc chỉ số 0 bắt đầu ở chữ số nhị phân ngoài cùng bên phải vì số nhị phân được tính từ phải sang trái
'Reduce' Hàm mảng đi qua mảng, thực hiện tính tổng của (2 ^ chỉ số) cho mỗi chữ số nhị phân [chỉ khi chữ số nhị phân === 1] (chữ số 0 luôn mang lại 0)
LƯU Ý: Công thức chuyển đổi nhị phân:
{trong đó d = chữ số nhị phân, i = chỉ số mảng, n = độ dài mảng-1 (bắt đầu từ bên phải)}
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)lợi nhuận5.