2012-07-06 67 views
5

Cómo convertir cadenas en bits (no bytes) o en una matriz de bits en Java (haré algunas operaciones más adelante) y cómo convertir en una matriz de ints (cada 32 bits se convierten en la int y luego ponerlo en la matriz nunca he hecho este tipo de conversión en JavaCómo convertir una cadena en bits y luego en una matriz int - java

String->array of bits->(some operations I'll handle them)->array of ints 
+3

favor proporcionar más detalles sobre lo que en la tierra que está haciendo. – Wug

+0

Proporciono tanta información como sea necesaria. No quería desenfocarlo demasiado. – Yoda

+1

Si te piden más detalles, eso es una pista de que se necesita más información. –

Respuesta

9
ByteBuffer bytes = ByteBuffer.wrap(string.getBytes(charset)); 
    // you must specify a charset 
IntBuffer ints = bytes.asIntBuffer(); 
int numInts = ints.remaining(); 
int[] result = new int[numInts]; 
ints.get(result); 
+0

Gracias. Lo comprobaré lo más rápido que pueda. Parece prometedor. (Si proporcionará bits, no bytes) – Yoda

+0

Como dije en otros comentarios, realmente no hay forma de obtener bits en Java que _no acaba de obtener bytes o ints o algo más grande. (Dicho esto, los bits se pueden extraer fácilmente de los bytes.) –

0

Usted está buscando this:?.

string.getBytes(); 
No

lista, se trata de una array pero puede usarlo más adelante, incluso para convertirlo en enteros.

+0

Quise decir bits, no bytes;) – Yoda

+0

No puede obtener bits puros en Java. Solo puede obtenerlos "a granel" como bytes, entradas, etc. –

+1

En serio, ¿no puede obtener bits de bytes? :) – Matzi

0

Bueno, tal vez usted puede saltar la cuerda a la conversión de los bits y convertir directamente a un array de enteros (si lo que quiere es el valor Unicode de cada personaje), utilizando s.toCharArray() donde s es una variable String.

+0

No, no quiero convertirlo a int. Necesito hacer algunas operaciones en bits primero (agregue algunos bits). – Yoda

0

Esto convertirá "abc" en byte y luego el código imprimirá "abc" en el código ASCII respectivo (es decir, 97 98 99).

byte a[]=new byte[160]; 
String s="abc"; 
a=s.getBytes(); 
for(int i=0;i<s.length();i++) 
{ 
    System.out.print(a[i]+" "); 
} 
+0

Sé eso. Necesito bits -> 10101010101 este tipo;) – Yoda

0

puede ser así (no tengo compilador en mi equipo actual y no probar si funciona, pero te puedo ayudar un poco):

String st="this is a string"; 
byte[] bytes=st.getBytes(); 
List<Integer> ints=new ArrayList<Integer>(); 
ints.addAll(bytes); 

Si compilador falla en

ints.addAll(bytes); 

se puede reemplazar con

for (int i=0;i<bytes.length();i++){ 
    ints.add(bytes[i]); 
} 

y si usted quiere conseguir exactamente matriz:

ints.toArray(); 
+0

Oops, lo siento, te he entendido mal. Quieres obtener pedazos. – MikhailSP

0

Tenga en cuenta que la cadena es una secuencia de caracteres, y en Java cada tipo de datos char es un carácter Unicode de 16 bits. Tiene un valor mínimo de '\ u0000' (o 0) y un valor máximo de '\ uffff' (o 65,535 inclusive). Con el fin de obtener el valor entero de carbón hacer esto:

String str="test"; 
    String tmp=""; 

    int result[]=new int[str.length()/2+str.length()%2]; 
    int count=0; 

    for(char c:str.toCharArray()) { 
     tmp+=Integer.toBinaryString((int)c); 
     if(tmp.length()==14) { 
      result[count++]=Integer.valueOf(tmp,2); 
      //System.out.println(tmp+":"+result[count-1]); 
      tmp=""; 
     } 
    } 

    for(int i:result) { 
     System.out.print(i+" "); 
    } 
2

esta es la respuesta

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