Convertendo binário para decimal

Izaque Rodrigues
4 min readOct 31, 2020

--

Na busca de ideias para projetos acabei me deparando com um repositório que reúne 80 projetos para programadores, indo do nível básico ao avançado.

Sobre o projeto

script do projeto

Existem alguns requisitos que você pode seguir nesse desafio, no caso o criador sugere a não utilização de arrays para armazenar os números digitados pelo usuário, algo que depois de algumas tentativas que não deram certo (quando parecia funcionar eu tinha problemas com a validação) eu acabei ignorando e busquei outras formas de resolver o problema.

Acabei lembrando do método “split”, que li em um artigo da DevMedia já faz alguns dias, sua função é separar os elementos de uma string dentro de um array, você só precisa de uma variável para armazenar o array e definir os parâmetros de separação, ex:

const teste = “abacaxi”

const testeSplit = teste.split(“”)

console.log(testeSplit)//

Será retornado o seguinte array:

[“a”, “b”, “a”, “c”, “a”, “x”, “i”]

Como determinei um parâmetro vazio o console me retornou as letras de forma separada, mas você pode utilizar qualquer valor como critério de separação, seja letras, símbolos, ou mesmo um “espaço” para dividir o nome completo de uma pessoa ou rua, por exemplo.

Voltando ao código, eu criei uma constante “binary” que recebe o valor digitado pelo usuário no input text e em seguida tenho uma função que faz a primeira parte da validação do input, pois por se tratar de um binário o usuário só pode digitar 0 e 1.

Eu passei muito tempo quebrando a cabeça e pensando em como fazer isso, fiz várias tentativas com o for, a melhor delas funcionava pela metade, pois por algum motivo um alert informando o usuário que o valor digitado não era um binário não aparecia na tela. Eu fiquei imaginando como filtrar os números que não são zeros e uns.

Li a documentação, procurei vídeos, mas nada se aproximou do que eu queria fazer, até que me toquei de algo que estava na minha cara o tempo todo. Eu literalmente podia filtrar esses valores indesejados com método filter, e foi aí ai que a coisa fluiu (e o maior motivo da minha utilização do método split, transformando a string em array).

Sabendo que a function “validateNum()” só me retorna um valor se ele for menor ou igual a um:

  • criei uma constante “splitBin” que recebe o array gerado a partir do “binary.split(“”)”.
  • em seguida uma outra constante, “numValidate”, que filtra os valores de splitBin de acordo os parâmetros definidos em validateNum.

Agora que a mágica acontece, tendo em mente que o array orignal é o splitBin, comparando o tamanho de splitBin com o de numValidate, se algum caractere diferente de 0 ou 1 for digitado o valor de numValidate será menor que o de splitBin, caso contrario temos um verdadeiro binário!

E assim que a lógica deu o ar de sua graça ficou fácil terminar o desafio, basta um if para fazer a ultima parte da validação do senhor binário, e, se o usuário digitou alguma coisa errada, um alerta aparecerá na tela para avisa-lo:

if (numValidate.length !== splitBin.length) {

alert(“It’s not binary”)

O próximo requisito é que o tamanho limite do binário seja de 8 dígitos, ai entra o nosso else if, com um alerta caso limite tenha sido ultrapassado:

} else if (splitBin.length > 8) {

alert(“Please, enter up to 8 binary digits”)

Assim chegamos a ultima constante do código: validBinary.

Utilizando o método “parseInt” resgatamos o valor de binary e elevamos a base 2, convertendo enfim o binário para decimal:

const validBinary = parseInt(binary, 2)

Por fim temos a let decimalValue que é a responsável por adicionar o resultado de validBinary ao valor do decimal a tela, por meio do value de um segundo input do tipo texto, que é desabilitado para o usuário, veja:

let decimalValue

decimalValue = document.getElementById(“decimal”).value = `${validBinary}`

Talvez essa não seja a resolução que o autor do desafio imaginou, mas acredito que foi uma boa forma de solucionar, e ainda me proporcionou boas horas de estudo. E se você chegou até aqui espero que tenha gostado do conteúdo, tentei fazer de uma forma que ficasse mais fácil de entender e de alguma forma mostrar a minha lógica para a resolução do problema.

Abaixo estarei deixando o link do GitHub Pages, onde você pode testar a minha aplicação, assim como o repositório com o código completo, obrigado!

--

--

Izaque Rodrigues
Izaque Rodrigues

Written by Izaque Rodrigues

0 Followers

Estudante de Análise e Desenvolvimento de Sistemas, apaixonado por tecnologia e programação front-end.

No responses yet