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.
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.
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.
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.
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;
}
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.
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.
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);
}
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í.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.