Categorías: java

Java: traductor binario – texto

En esta entrada sobre Java te voy a enseñar a convertir texto a binario, y binario a texto. Es decir, hacer un tipo de Traductor texto – binario en Java para poder convertir entre ambos formatos.

Otra forma de llamar a esto es decir “Traductor binario a español” por ejemplo.

Traductor texto a binario en Java – Programación

Por ejemplo, convertir 1110000 1100001 1110010 1111010 1101001 1100010 1111001 1110100 1100101 101110 1101101 1100101 a “parzibyte.me” y viceversa.

Todo esto programado en Java con métodos manuales.

Convertir texto a binario: algoritmo

El algoritmo es sencillo. Tenemos el texto en español como una cadena. Extraemos cada letra, y por cada una obtenemos su valor ASCII.

Después de tener su valor ASCII como entero, lo convertimos a binario. Y una vez que lo tenemos como binario, lo vamos almacenando en una cadena que será el resultado. En esta cadena agregamos los valores binarios separándolos por un espacio.

De binario a texto

El procedimiento es casi inverso al anterior, pero con la diferencia de que ahora vamos a usar split. Tenemos la cadena binaria (cada número binario representa un carácter) separada por espacios.

Obtenemos cada número binario de manera separada con split. Lo que hace split es separar una cadena y convertirla a arreglo. Luego recorremos el arreglo, convertimos el binario a entero (que tendrá la representación ASCII) y obtenemos el carácter que representa.

Funciones de conversión

Para la conversión de números, los métodos que convierten un número binario a decimal, y uno decimal a binario, son:

public static int binaryToDecimal(String binary) {
    // A este número le vamos a sumar cada valor binario
    int decimal = 0;
    int position = 0;
    // Recorrer la cadena...
    for (int x = binary.length() - 1; x >= 0; x--) {
        // Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
        short digit = 1;
        if (binary.charAt(x) == '0') {
            digit = 0;
        }

  /*
      Se multiplica el dígito por 2 elevado a la potencia
      según la posición; comenzando en 0, luego 1 y así
      sucesivamente
   */        double multiplier = Math.pow(2, position);
        decimal += digit * multiplier;
        position++;
    }
    return decimal;
}

public static String decimalToBinary(int decimal) {
    if (decimal <= 0) {
        return "0";
    }
    String binary = "";
    while (decimal > 0) {
        short remainder = (short) (decimal % 2);
        decimal = decimal / 2;
        // Insertar el dígito al inicio de la cadena
        binary = String.valueOf(remainder) + binary;
    }
    return binary;
}

Convertir texto a binario

Veamos el primer caso entonces para convertir el texto a binario. Es una función que recibe la cadena, la recorre, convierte cada letra y la agrega al resultado:

public static String textToBinary(String originalText) {
    String binaryText = "";
    for (int i = 0; i < originalText.length(); i++) {
        // Primero obtenemos la letra o carácter actual
        char currentChar = originalText.charAt(i);
        // Necesitamos obtener su representación entera ASCII
        int ascii = (int) currentChar;
        // Una vez que ya tenemos el entero, lo convertimos a binario
        String binary = decimalToBinary(ascii);
        // Lo agregamos a la cadena resultante agregando además un espacio
        binaryText += binary + " ";
    }
    // Finalmente regresamos el texto
    return binaryText;
}

Lo que la función devuelve es igualmente una cadena con el texto binario. Con esto conseguimos traducir de string a binario, es decir, a ceros y unos.

Binario a texto

Para el proceso inverso igualmente tenemos otra función:

public static String binaryToText(String binaryText) {
    // Necesitamos separar cada número binario por espacio. Usamos split
    String[] binaryNumbers = binaryText.split(" ");
    String text = "";

    // Los recorremos. En cada paso tenemos al número binario
    for (String currentBinary : binaryNumbers) {
        // Ahora convertimos ese binario a decimal
        int decimal = binaryToDecimal(currentBinary);
        // Obtenemos la letra que le corresponde a ese valor ASCII
        char letra = (char) decimal;
        text += letra;
    }
    return text;
}

Lo que mencionaba sobre split está en la línea 3. Lo convertimos a arreglo, recorremos cada valor binario, y lo vamos convirtiendo a decimal para obtener su representación ASCII.

Probando el traductor

Para probar todo esto se pueden usar cadenas escritas por nosotros o con texto proporcionado por el usuario, aquí solo estoy ejemplificando pero al final puede quedar como tú prefieras.

Más abajo dejaré el código completo.

public static void main(String[] args) {
    String originalText = "parzibyte.me";
    System.out.println("Texto original: " + originalText);
    String translatedText = textToBinary(originalText);
    System.out.println("Convertido a binario es: " + translatedText);


    System.out.println("-----------------");


    String binaryText = "1110000 1100001 1110010 1111010 1101001 1100010 1111001 1110100 1100101 101110 1101101 1100101";
    System.out.println("Binario: " + binaryText);
    String translatedBinary = binaryToText(binaryText);
    System.out.println("Convertido a texto es: " + translatedBinary);
    // También podemos convertir algo que el usuario proporcione
    String userText = "";
    Scanner sc = new Scanner(System.in);
    System.out.println("Ingresa algún texto y yo lo convertiré a binario: ");
    userText = sc.nextLine();
    translatedText = textToBinary(userText);
    System.out.println(translatedText);
    System.out.println("Ingresa un texto en binario y lo convertiré a texto en español: ");
    userText = sc.nextLine();
    translatedBinary = binaryToText(userText);
    System.out.println(translatedBinary);

}

Demostración

Poniendo todo junto

El código completo queda como se ve a continuación:

/*
  ____          _____               _ _           _
 |  _ \        |  __ \             (_) |         | |
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |
        |___/                               |___/

____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me               /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Creado por Parzibyte (https://parzibyte.me). Este encabezado debe mantenerse intacto,
excepto si este es un proyecto de un estudiante.
* */
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        String originalText = "parzibyte.me";
        System.out.println("Texto original: " + originalText);
        String translatedText = textToBinary(originalText);
        System.out.println("Convertido a binario es: " + translatedText);


        System.out.println("-----------------");


        String binaryText = "1110000 1100001 1110010 1111010 1101001 1100010 1111001 1110100 1100101 101110 1101101 1100101";
        System.out.println("Binario: " + binaryText);
        String translatedBinary = binaryToText(binaryText);
        System.out.println("Convertido a texto es: " + translatedBinary);
        // También podemos convertir algo que el usuario proporcione
        String userText = "";
        Scanner sc = new Scanner(System.in);
        System.out.println("Ingresa algún texto y yo lo convertiré a binario: ");
        userText = sc.nextLine();
        translatedText = textToBinary(userText);
        System.out.println(translatedText);
        System.out.println("Ingresa un texto en binario y lo convertiré a texto en español: ");
        userText = sc.nextLine();
        translatedBinary = binaryToText(userText);
        System.out.println(translatedBinary);

    }

    public static String binaryToText(String binaryText) {
        // Necesitamos separar cada número binario por espacio. Usamos split
        String[] binaryNumbers = binaryText.split(" ");
        String text = "";

        // Los recorremos. En cada paso tenemos al número binario
        for (String currentBinary : binaryNumbers) {
            // Ahora convertimos ese binario a decimal
            int decimal = binaryToDecimal(currentBinary);
            // Obtenemos la letra que le corresponde a ese valor ASCII
            char letra = (char) decimal;
            text += letra;
        }
        return text;
    }


    public static String textToBinary(String originalText) {
        String binaryText = "";
        for (int i = 0; i < originalText.length(); i++) {
            // Primero obtenemos la letra o carácter actual
            char currentChar = originalText.charAt(i);
            // Necesitamos obtener su representación entera ASCII
            int ascii = (int) currentChar;
            // Una vez que ya tenemos el entero, lo convertimos a binario
            String binary = decimalToBinary(ascii);
            // Lo agregamos a la cadena resultante agregando además un espacio
            binaryText += binary + " ";
        }
        // Finalmente regresamos el texto
        return binaryText;
    }

    public static int binaryToDecimal(String binary) {
        // A este número le vamos a sumar cada valor binario
        int decimal = 0;
        int position = 0;
        // Recorrer la cadena...
        for (int x = binary.length() - 1; x >= 0; x--) {
            // Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
            short digit = 1;
            if (binary.charAt(x) == '0') {
                digit = 0;
            }

      /*
          Se multiplica el dígito por 2 elevado a la potencia
          según la posición; comenzando en 0, luego 1 y así
          sucesivamente
       */            double multiplier = Math.pow(2, position);
            decimal += digit * multiplier;
            position++;
        }
        return decimal;
    }

    public static String decimalToBinary(int decimal) {
        if (decimal <= 0) {
            return "0";
        }
        String binary = "";
        while (decimal > 0) {
            short remainder = (short) (decimal % 2);
            decimal = decimal / 2;
            // Insertar el dígito al inicio de la cadena
            binary = String.valueOf(remainder) + binary;
        }
        return binary;
    }
}

Recuerda que puedes adaptarlo a tus necesidades, traducirlo, copiar solo algunas funciones, etcétera.

¿Más de Java? claro que sí, justo aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.