이진 문자열을 십진수로 변환하는 방법?
이진 문자열을 숫자로 변환하고 싶습니다.
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
그게 어떻게 가능해? 감사
이 parseInt
함수는 문자열을 숫자로 변환하고 문자열 표현의 밑을 지정하는 두 번째 인수를 사용합니다.
var digit = parseInt(binary, 2);
ES6는 정수에 대한 이진 숫자 리터럴 을 지원 하므로 질문의 예제 코드에서와 같이 이진 문자열이 변경 불가능한 경우 접두사 0b
또는 0B
다음 과 같이 입력 할 수 있습니다 .
var binary = 0b1101000; // code for 104
console.log(binary); // prints 104
parseInt()
기수를 사용하는 것이 최상의 솔루션입니다 (많은 사람들이 말했듯이).
그러나 parseInt없이 구현하려면 다음과 같은 구현이 있습니다.
function bin2dec(num){
return num.split('').reverse().reduce(function(x, y, i){
return (y === '1') ? x + Math.pow(2, i) : x;
}, 0);
}
다음의 기수 매개 변수를 사용하십시오 parseInt
.
var binary = "1101000";
var digit = parseInt(binary, 2);
console.log(digit);
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
강제 변환은
String
입력
c
(A)에
Number
적절히 첨가 타입 값.
나는 다른 사람들이 제안한 것을 모두 모아서 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>
참고 : 16 진수로 2d를 전달하려면 다음과 같이 문자열로 보내야합니다. changeBase('2d', 16, 10)
ES6 구문과 자동 기능을 사용하여 약간 수정 된 기존 바이너리 변환 알고리즘 :
이진 시퀀스 문자열을 배열로 변환 (이미 배열로 전달되지 않았다고 가정)
이진수가 오른쪽에서 왼쪽으로 계산 될 때 0 인덱스가 맨 오른쪽 이진수에서 시작하도록하려면 시퀀스를 반대로합니다.
'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}).`);
참고URL : https://stackoverflow.com/questions/10258828/how-to-convert-binary-string-to-decimal
'Programing' 카테고리의 다른 글
JS에서 페이지 언로드 (탐색)를 어떻게 중지합니까? (0) | 2020.11.07 |
---|---|
내 모델 유효성 검사를 우회하는 Factory-girl create (0) | 2020.11.07 |
MatchCollection을 string 형 배열로 변환 (0) | 2020.11.07 |
Elixir에서 현재 날짜 및 / 또는 시간 가져 오기 (0) | 2020.11.07 |
IntelliJ UI를 기본값으로 재설정 (0) | 2020.11.07 |