2009-05-27 51 views
36

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). GraciasConvertir una cadena (como testing123) A binario En Java

+0

Escriba un ejemplo de las entradas y salidas que estamos hablando. –

+0

¿Qué quiere decir "otras formas, como binario". Técnicamente, la cadena ya está en una representación binaria. ¿Quiere decir que quiere tomar una entrada de cadena y visualizar la representación binaria de la cadena, ya que estaría codificada en bytes ASCII? – Jared

+0

por ejemplo ingresando testing123 y obteniendo el equivalente binario como salida –

Respuesta

5

A String en Java se puede convertir a "binario" con su método getBytes(Charset).

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

El argumento para este método es una "codificación 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.

Por lo general, la codificación 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 codificación fácil, segura y ampliamente compatible.

  • Es fácil, porque en lugar de incluir alguna forma de observar la codificación de cada mensaje, puede configurar por defecto UTF-8.
  • Es seguro, porque UTF-8 puede codificar cualquier carácter que se pueda usar 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.
+0

lo he intentado, pero dice que no estoy controlando la excepción mi código actual es ... clase pública convertStringToACHII {public void convert (palabra String) { cadena s = palabra; byte [] b = s.getBytes ("UTF-8"); System.out.println ("En UTF-8:" + b); byte [] c = s.getBytes ("US-ASCII"); System.out.println ("En ASCII:" + c); } } –

+1

s.getBytes ("UTF-8") arroja UnsupportedEncodingException. Por lo tanto, debe rodear su conversión con un try-catch si está utilizando getBytes (codificación de cadena). – Nuoji

+1

Sí, porque puede especificar cualquier codificación, y algunas codificaciones son opcionales, este método puede generar una excepción (marcada). Luego, si el código se ejecuta en una JVM sin una codificación particular, puede detectarlo. Sin embargo, se requiere UTF-8, por lo que creo que es justo ajustar esta excepción así: nueva IllegalStateException ("codificación requerida no disponible: UTF-8", ej.); – erickson

63

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

Tenga en cuenta que getBytes() utiliza el juego de caracteres por defecto, por lo que si desea que la cadena convertida en cierta codificación de caracteres específicos, se debe utilizar getBytes(String encoding) lugar, pero muchas veces (especialmente cuando se trata de ASCII) getBytes() es suficiente (y tiene la ventaja de no lanzando una excepción marcada).

Para la conversión específica a binario, aquí es 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); 

La ejecución de este ejemplo se Rendimiento:

'foo' to binary: 01100110 01101111 01101111 
+0

Nuoji, ¿Puedes guiarme por algún material de estudio que me ayude a comprender mejor la solución completa? Ejemplo de por qué el "ANDING" y el desplazamiento a la izquierda, etc. Gracias de antemano –

+4

Acabo de leer en la wikipedia http://en.wikipedia.org/wiki/Bitwise_operation que no sea eso. Lo que hace el código es ver si el bit más alto está establecido o no. Si es así, agregue uno, de lo contrario agregue un cero. Luego muevo todos los bits en el número original a la izquierda, lo que significa que el siguiente bit más alto está ahora en la posición del bit más alto, el siguiente más alto en el siguiente más alto, etc., y el bit más alto anterior se ha ido.De nuevo, pruebo si el bit más alto está configurado (este fue originalmente el siguiente bit más alto) y agregué '0' o '1'. Luego mueve los bits un paso y haz lo mismo hasta que hayas probado todos los bits. – Nuoji

+0

¿Cómo es que el valor de val es b i.e. 'int val = b' – Babbleshack

7

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)); 

grabados

bytes= [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33] 
text again= Hello World! 
-1
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); 
    } 
} 
+1

en este código podemos convertir directamente el código hexa decimal en valor decimal y valor binario a la vez – siva

+1

Esto no aborda el caso de uso del asker. – Pops

1
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); 
    } 
} 
+3

Bienvenido a Stack Overflow; sangrar el código de 4 espacios (o usar el botón de la barra de herramientas para hacer lo mismo) – McDowell

+0

¿Puedo nombrar esto como una representación vectorial de un texto? –

-1

También puede hacer esto con el viejo buen método:

String inputLine = "test123"; 
String translatedString = null; 
char[] stringArray = inputLine.toCharArray(); 
for(int i=0;i<stringArray.length;i++){ 
     translatedString += Integer.toBinaryString((int) stringArray[i]); 
} 
0

Mientras que jugar un poco con las respuestas que encontré aquí para familiarizarse con él me retorció la solución de Nuoji un poco para que Lo podría entender más rápido al mirarlo 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();   
} 
+1

Sería genial si pudieras editar tu pregunta y compartir tu comprensión. Por ejemplo, podría explicar qué hace mejor su solución para que sea más fácil de entender. – honk

+0

No use 'String.getBytes()'. Utilizará lo que sea que sea la codificación de plataforma predeterminada, que es prácticamente aleatoria. Entonces, dependiendo de dónde ejecute el código, producirá un resultado diferente. –

3

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 que se muestran por carbón.

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 
1

Ésta es mi aplicació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(); 

    } 
} 
0
>  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 
Cuestiones relacionadas