Estoy intentando usar un enfoque recursivo para escribir una función que tomará una cadena binaria, la dividirá en secciones de 8 bits y devolverá la cadena traducida a ASCII. Por lo que puedo decir del depurador en ejecución, mi función debería estar funcionando. El único problema con el que me encuentro es que cuando llamo a join('') en mi variable 'currentArray', de hecho no se está uniendo a la matriz. Cualquier entrada sería útil en lo que estoy haciendo mal aquí.
function binaryToString(binaryBlob, finalString = []) { if (binaryBlob.length === 0) return finalString.join(''); let currentArray = []; let binaryArray = binaryBlob.split(''); currentBit = binaryArray.splice(0, 8); currentArray.push(currentBit); let joinedString = currentArray.join(''); let base10String = Number(joinedString); let ASCII = String.fromCharCode(base10String); finalString.push(ASCII); return binaryToString(binaryArray.join(''), currentArray, finalString); };Resultados esperados:
console.log(binaryToString('010000010100001001000011')); // should return 'ABC' console.log(binaryToString('001101100011011100111000')); // should return '678'Un par de cosas:
finalArr en lugar de finalString , etc.currentArray no parece ser necesario. Use slice directamente en la cadena para obtener los primeros 8 caracteres del byte y vuelva a dividir para proporcionar los caracteres restantes a la próxima llamada.Aquí hay una versión ligeramente refactorizada que lo hace más claro:
function binaryToString(binaryStr, asciiArr = []) { if (binaryStr.length === 0) { return asciiArr.join(''); } const byteStr = binaryStr.slice(0, 8); const remaining = binaryStr.slice(8); const byte = parseInt(byteStr, 2); // `2` indicates base of input string const ascii = String.fromCharCode(byte); asciiArr.push(ascii); return binaryToString(remaining, asciiArr); }; console.log(binaryToString('010000010100001001000011')); // 'ABC' console.log(binaryToString('001101100011011100111000')); // '678'