Convertir una cadena (como testing123) en Binary In Java

Me gustaría poder convertir una Cadena (con palabras / letras) a otras formas, como binario. ¿Cómo voy a hacer esto? Estoy codificando en BLUEJ (Java). Gracias

La forma habitual es usar String#getBytes() para obtener los bytes subyacentes y luego presentar esos bytes en alguna otra forma (hexadecimal, binario).

Tenga en cuenta que getBytes() usa el getBytes() caracteres predeterminado, por lo que si desea convertir la cadena a una encoding de caracteres específica, debe usar getBytes(String encoding) , pero muchas veces (especialmente cuando se trata de ASCII) getBytes() es suficiente (y tiene la ventaja de no arrojar una excepción marcada).

Para la conversión específica a binario, aquí hay un ejemplo:

  String s = "foo"; byte[] bytes = s.getBytes(); StringBuilder binary = new StringBuilder(); for (byte b : bytes) { int val = b; for (int i = 0; i < 8; i++) { binary.append((val & 128) == 0 ? 0 : 1); val <<= 1; } binary.append(' '); } System.out.println("'" + s + "' to binary: " + binary); 

Ejecutando este ejemplo producirá:

 'foo' to binary: 01100110 01101111 01101111 

Un ejemplo más corto

 private static final Charset UTF_8 = Charset.forName("UTF-8"); String text = "Hello World!"; byte[] bytes = text.getBytes(UTF_8); System.out.println("bytes= "+Arrays.toString(bytes)); System.out.println("text again= "+new String(bytes, UTF_8)); 

huellas dactilares

 bytes= [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33] text again= Hello World! 

Una String en Java se puede convertir a “binario” con su getBytes(Charset) .

 byte[] encoded = "こんにちは、世界!".getBytes(StandardCharsets.UTF_8); 

El argumento para este método es una “encoding de caracteres”; esto es un mapeo estandarizado entre un personaje y una secuencia de bytes. A menudo, cada carácter está codificado en un solo byte, pero no hay suficientes valores únicos de bytes para representar cada carácter en cada idioma. Otras codificaciones usan múltiples bytes, por lo que pueden manejar un rango más amplio de caracteres.

Usualmente, la encoding a usar será especificada por algún estándar o protocolo que esté implementando. Si está creando su propia interfaz y tiene la libertad de elegir, “UTF-8” es una encoding fácil, segura y ampliamente compatible.

  • Es fácil, porque en lugar de incluir alguna forma de observar la encoding de cada mensaje, puede usar el UTF-8 de manera predeterminada.
  • Es seguro, porque UTF-8 puede codificar cualquier carácter que pueda usarse en una cadena de caracteres Java.
  • Es ampliamente compatible, ya que es uno de los pocos codificadores de caracteres que deben estar presentes en cualquier implementación de Java, hasta J2ME. La mayoría de las otras plataformas también lo soportan, y se utiliza de forma predeterminada en estándares como XML.

Aquí están mis soluciones. Sus ventajas son: código de fácil comprensión, funciona para todos los personajes. Disfrutar.

Solución 1:

 public static void main(String[] args) { String str = "CC%"; String result = ""; char[] messChar = str.toCharArray(); for (int i = 0; i < messChar.length; i++) { result += Integer.toBinaryString(messChar[i]) + " "; } System.out.println(result); } 

impresiones:

 1000011 1000011 100101 

Solución 2:

Posibilidad de elegir el número de bits mostrados por char.

 public static String toBinary(String str, int bits) { String result = ""; String tmpStr; int tmpInt; char[] messChar = str.toCharArray(); for (int i = 0; i < messChar.length; i++) { tmpStr = Integer.toBinaryString(messChar[i]); tmpInt = tmpStr.length(); if(tmpInt != bits) { tmpInt = bits - tmpInt; if (tmpInt == bits) { result += tmpStr; } else if (tmpInt > 0) { for (int j = 0; j < tmpInt; j++) { result += "0"; } result += tmpStr; } else { System.err.println("argument 'bits' is too small"); } } else { result += tmpStr; } result += " "; // separator } return result; } 

 public static void main(String args[]) { System.out.println(toBinary("CC%", 8)); } 

impresiones:

 01000011 01000011 00100101 

Esta es mi implementación.

 public class Test { public String toBinary(String text) { StringBuilder sb = new StringBuilder(); for (char character : text.toCharArray()) { sb.append(Integer.toBinaryString(character) + "\n"); } return sb.toString(); } } 
 import java.lang.*; import java.io.*; class d2b { public static void main(String args[]) throws IOException{ BufferedReader b = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter the decimal value:"); String h = b.readLine(); int k = Integer.parseInt(h); String out = Integer.toBinaryString(k); System.out.println("Binary: " + out); } } 

Mientras jugaba con las respuestas que encontré aquí para familiarizarme con él, torcí la solución de Nuoji un poco para poder entenderla más rápido al mirarla en el futuro.

 public static String stringToBinary(String str, boolean pad ) { byte[] bytes = str.getBytes(); StringBuilder binary = new StringBuilder(); for (byte b : bytes) { binary.append(Integer.toBinaryString((int) b)); if(pad) { binary.append(' '); } } return binary.toString(); } 
 > int no=44; > String bNo=Integer.toString(no,2);//binary output 101100 > String oNo=Integer.toString(no,8);//Oct output 54 > String hNo=Integer.toString(no,16);//Hex output 2C > > String sBNo="101100"; > no=Integer.parseInt(sBNo,2);//binary to int output 44 > String sONo="54"; > no=Integer.parseInt(sONo,8);//oct to int output 44 > String sHNo="2C"; > no=Integer.parseInt(sHNo,16);//hex to int output 44 
 public class HexadecimalToBinaryAndLong{ public static void main(String[] args) throws IOException{ BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter the hexa value!"); String hex = bf.readLine(); int i = Integer.parseInt(hex); //hex to decimal String by = Integer.toBinaryString(i); //decimal to binary System.out.println("This is Binary: " + by); } } 

También puedes hacer esto con el buen método:

 String inputLine = "test123"; String translatedString = null; char[] stringArray = inputLine.toCharArray(); for(int i=0;i