이진 문자열을 10진수로 변환하는 방법은?
이진 문자열을 숫자 예로 변환합니다.
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
그게 어떻게 가능해?감사해요.
함수는 문자열을 숫자로 변환하며, 문자열 표현의 기본을 지정하는 두 번째 인수를 사용합니다.
var digit = parseInt(binary, 2);
실제로 보세요.
ES6는 정수에 대한 이진 숫자 리터럴을 지원하므로 문제의 예제 코드처럼 이진 문자열이 불변인 경우 접두사를 사용하여 그대로 입력할 수 있습니다.0b
아니면0B
:
var binary = 0b1101000; // code for 104
console.log(binary); // prints 104
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
다음의 radix 매개변수를 사용합니다.
var binary = "1101000";
var digit = parseInt(binary, 2);
console.log(digit);
parseInt()
radix를 사용하는 것이 가장 좋은 솔루션입니다(많은 분들이 말씀하셨습니다).
그러나 parseInt 없이 구현하려면 다음과 같이 구현해야 합니다.
function bin2dec(num){
return num.split('').reverse().reduce(function(x, y, i){
return (y === '1') ? x + Math.pow(2, i) : x;
}, 0);
}
저는 다른 사람들이 제안한 모든 것을 모아서 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>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>
참고: 통과하려면2d
16진수로서 문자열로 보내야 다음과 같습니다.changeBase('2d', 16, 10)
@baptx, @Jon 및 @ikhvjs의 주석을 기반으로 다음은 정말 큰 이진 문자열과 함께 작동해야 합니다.
// ES10+
function bin2dec(binStr) {
const lastIndex = binStr.length - 1;
return Array.from(binStr).reduceRight((total, currValue, index) => (
(currValue === '1') ? total + (BigInt(2) ** BigInt(lastIndex - index)) : total
), BigInt(0));
}
또는, a를 사용하여 동일.for
루프:
// ES10+
function bin2dec(binStr) {
const lastIndex = binStr.length - 1;
let total = BigInt(0);
for (let i = 0; i < binStr.length; i++) {
if (binStr[lastIndex - i] === '1') {
total += (BigInt(2) ** BigInt(i));
}
}
return total;
}
예를 들어,
console.log(bin2dec('101')); // 5n
console.log(bin2dec('110101')); // 53n
console.log(bin2dec('11111111111111111111111111111111111111111111111111111')); // 9007199254740991n
console.log(bin2dec('101110110001101000111100001110001000101000101011001100000011101')); // 6741077324010461213n
더 배우고 싶은 분들을 위해 블로그에 글을 올렸습니다.
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);
}
기능적인 JS 연습만을 위한 또 다른 구현은 다음과 같습니다.
var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));
+c
coerces
String
type
c
to a
Number
type value for proper addition.
일부 ES6 구문 및 자동 기능을 사용하여 약간 수정된 기존의 이진 변환 알고리즘:
이진 시퀀스 문자열을 배열로 변환(이미 배열로 전달되지 않았다고 가정)
역순서를 사용하여 이진법이 오른쪽에서 왼쪽으로 계산됨에 따라 0 인덱스를 오른쪽에서 시작합니다.
'reduce' 배열 함수는 배열을 횡단하여 이진 자리당 (2^index)의 합을 수행합니다 [이진 자리수 === 1인 경우에만] (0 자리수는 항상 0이 됩니다).
참고: 이진 변환 공식:
{여기서 d=digit, i=array 인덱스, n=array length-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}).`);
언급URL : https://stackoverflow.com/questions/10258828/how-to-convert-binary-string-to-decimal
'programing' 카테고리의 다른 글
iOS 8 iPhone에서 UIPopover 프레젠테이션 컨트롤러 (0) | 2023.09.06 |
---|---|
Mysql이 아래 오류 센토스를 생성하기 시작하지 않습니다. (0) | 2023.09.06 |
입력 유형 = 파일 표시 전용 버튼 (0) | 2023.09.06 |
mingw로 mariadb C 커넥터를 만들 수 없습니다. (0) | 2023.09.06 |
Express와 hapi는 서로 어떻게 비교됩니까? (0) | 2023.09.06 |