Quiero convertir una cadena binaria en dígitos Eg
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
¿Como es posible? Gracias
Quiero convertir una cadena binaria en dígitos Eg
var binary = "1101000" // code for 104
var digit = binary.toString(10); // Convert String or Digit (But it does not work !)
console.log(digit);
¿Como es posible? Gracias
Respuestas:
La parseIntfunción convierte cadenas en números y toma un segundo argumento que especifica la base en la que la representación de la cadena es:
var digit = parseInt(binary, 2);
parseInt. Pensé que convertiría la cadena de base 10 -> lo que sea (pensar como parseInt('5612', 2)devolvería su forma binaria;).
ES6 admite literales numéricos binarios para números enteros, por lo que si la cadena binaria es inmutable, como en el código de ejemplo en la pregunta, uno podría simplemente escribirlo como está con el prefijo 0bo 0B:
var binary = 0b1101000; // code for 104
console.log(binary); // prints 104
parseInt() con radix es la mejor solución (como dijeron muchos):
Pero si desea implementarlo sin parseInt, aquí hay una implementación:
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
Reuní todo lo que otros han sugerido y creé la siguiente función que tiene 3 argumentos, el número y la base de la que proviene ese número y la base en la que estará ese número:
changeBase(1101000, 2, 10) => 104
Ejecute el fragmento de código para probarlo usted mismo:
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: Si desea pasar 2d como número hexadecimal, debe enviarlo como una cadena para que sea así:
changeBase('2d', 16, 10)
Otra implementación solo para la práctica funcional de JS podría ser
var bin2int = s => Array.prototype.reduce.call(s, (p,c) => p*2 + +c)
console.log(bin2int("101010"));
+ccoacciona el Stringtipo ca un Numbervalor de tipo para una adición adecuada.
Algoritmo de conversión binaria convencional ligeramente modificado que utiliza más sintaxis y funciones automáticas de ES6:
Convierta la cadena de secuencia binaria en Array (suponiendo que no se haya pasado ya como matriz)
Secuencia inversa para forzar que el índice 0 comience en el dígito binario más a la derecha, ya que el binario se calcula de derecha a izquierda
La función de matriz 'reducir' atraviesa la matriz, realizando la suma de (2 ^ índice) por dígito binario [solo si dígito binario === 1] (0 dígito siempre da como resultado 0)
NOTA: Fórmula de conversión binaria:
{donde d = dígito binario, i = índice de matriz, n = longitud de matriz-1 (comenzando desde la derecha)}
norte
∑ (d * 2 ^ i)
yo = 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)devuelve5.