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
parseInt(101, 2)
devuelve5
.parseInt
. Pensé que convertiría la cadena de base 10 -> lo que sea (pensar comoparseInt('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
0b
o0B
:var binary = 0b1101000; // code for 104 console.log(binary); // prints 104
fuente
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); }
fuente
Utilice el parámetro de base de
parseInt
:var binary = "1101000"; var digit = parseInt(binary, 2); console.log(digit);
fuente
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); }
fuente
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
fuente
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)
fuente
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"));
+c
coacciona elString
tipoc
a unNumber
valor de tipo para una adición adecuada.fuente
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}).`);
fuente