2012-07-06 13 views
5

Come convertire string in bit (non byte) o array di bit in Java (eseguirò alcune operazioni in un secondo momento) e come convertire in array di ints (ogni 32 bit si trasformano in int e poi metterlo nella matrice non ho mai fatto questo tipo di conversione in JavaCome convertire string in bit e poi in int array - java

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

si prega di fornire maggiori dettagli su cosa diavolo stai facendo. – Wug

+0

Fornisco tutte le informazioni necessarie. Non volevo sfocare troppo. – Yoda

+1

Se vieni chiesto maggiori dettagli, è un suggerimento che servono più informazioni. –

risposta

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

Grazie. Lo controllerò il più velocemente possibile. Sembra promettente (se fornirà bit e non byte) – Yoda

+0

Come ho già detto in altri commenti, non c'è davvero modo di ottenere bit in Java che non riescono a ottenere solo byte o interi o qualcosa di più grande. (Ciò detto, i bit possono essere facilmente estratti dai byte.) –

0

stai cercando this:?.

string.getBytes(); 
Non

lista, si tratta di un array ma è possibile utilizzarlo in seguito, anche per convertirlo in numeri interi

+0

Intendevo bit, non byte;). – Yoda

+0

Non è possibile ottenere bit puri in Java. È possibile ottenerli "alla rinfusa" come byte, interi, ecc. –

+1

Seriamente, non è possibile ottenere bit dai byte? :) – Matzi

0

Beh, forse si può saltare la stringa alla conversione bit e convertire direttamente in un array di int (se quello che vuoi è il valore Unicode di ogni personaggio), utilizzando s.toCharArray() dove s è una variabile String.

+0

No non voglio convertirlo in int. Devo prima eseguire alcune operazioni sui bit (aggiungere alcuni bit). – Yoda

0

Questo convertirà "abc" in byte e quindi il codice stamperà "abc" nel rispettivo codice ASCII (ad esempio 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

Conosco quella roba. Ho bisogno di bit -> 10101010101 di questo tipo;) – Yoda

0

può essere così (non ho compilatore nel mio attuale computer e non verificano se funziona, ma può aiutare un po '):

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

Se compilatore non riesce a

ints.addAll(bytes); 

è possibile sostituirlo con

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

e se si desidera ottenere esattamente array:

ints.toArray(); 
+0

Oops, mi dispiace, ti ho capito male. Vuoi prendere pezzi. – MikhailSP

0

Nota che stringa è una sequenza di caratteri, e in Java ogni tipo di dati char è un singolo carattere Unicode a 16 bit. Ha un valore minimo di '\ u0000' (o 0) e un valore massimo di '\ uffff' (o 65.535 inclusi). Al fine di ottenere valore intero char fare questo:

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

questa è la risposta

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