Come convertire Java String in byte ?

Esiste un modo per convertire Java String in un byte[] ( non nel Byte[] box Byte[] )?

Nel provare questo:

 System.out.println(response.split("\r\n\r\n")[1]); System.out.println("******"); System.out.println(response.split("\r\n\r\n")[1].getBytes().toString()); 

e sto ottenendo risultati separati. Imansible visualizzare la prima uscita poiché è una stringa gzip.

  ****** [[email protected] 

Il secondo è un indirizzo. C’è qualcosa che sto sbagliando? Ho bisogno del risultato in un byte[] per nutrirlo con gzip decompressore, che è il seguente.

 String decompressGZIP(byte[] gzip) throws IOException { java.util.zip.Inflater inf = new java.util.zip.Inflater(); java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip); java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein); java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream(); int res = 0; byte buf[] = new byte[1024]; while (res >= 0) { res = gzin.read(buf, 0, buf.length); if (res > 0) { byteout.write(buf, 0, res); } } byte uncompressed[] = byteout.toByteArray(); return (uncompressed.toString()); } 

L’object il cui metodo decompressGZIP() bisogno è un byte[] .

Quindi la risposta tecnica di base alla domanda che hai posto è:

 byte[] b = string.getBytes(); byte[] b = string.getBytes(Charset.forName("UTF-8")); byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only 

Tuttavia, il problema con cui ti sembra che stia lottando è che questo non si mostra molto bene. Chiamando toString() ti verrà dato solo l’object Object.toString() che è il nome della class + indirizzo di memoria. Nel risultato [[email protected] , [B significa byte[] e 38ee9f13 è l’indirizzo di memoria, separato da un @ .

Per scopi di visualizzazione è ansible utilizzare:

 Arrays.toString(bytes); 

Ma questo verrà solo visualizzato come una sequenza di numeri interi separati da virgole, che possono o meno essere quelli che vuoi.

Per ottenere una String leggibile da un byte[] , utilizzare:

 String string = new String(byte[] bytes, Charset charset); 

Il motivo per cui la versione di Charset è preferita, è che tutti gli oggetti String in Java sono memorizzati internamente come UTF-16. Quando si converte in un byte[] si otterrà una diversa suddivisione dei byte per i glifi dati di quella String , a seconda del set di caratteri scelto.

  String example = "Convert Java String"; byte[] bytes = example.getBytes(); 

Prova a utilizzare String.getBytes (). Restituisce un byte [] che rappresenta i dati di stringa. Esempio:

 String data = "sample data"; byte[] byteData = data.getBytes(); 

Semplicemente:

 String abc="abcdefghight"; byte[] b = abc.getBytes(); 

È ansible utilizzare String.getBytes() che restituisce l’array byte[] .

Potresti provare a return new String(byteout.toByteArray(Charset.forName("UTF-8")))

 import java.io.UnsupportedEncodingException; import java.util.Arrays; public class ConvertStringtoByte { public static void main(String[] args) throws UnsupportedEncodingException { String givenString = "stackoverflow"; System.out.println(givenString ); byte[] byteValue = givenString .getBytes(); System.out.println(Arrays.toString(byteValue )); byte[] byteValueAscii= letters.getBytes("US-ASCII"); System.out.println(Arrays.toString(byteValueAscii)); } } 

Non è necessario modificare java come parametro String. Devi cambiare il codice c per ricevere una stringa senza puntatore e nel suo codice:

 Bool DmgrGetVersion (String szVersion); Char NewszVersion [200]; Strcpy (NewszVersion, szVersion.t_str ()); .t_str () applies to builder c ++ 2010 

So di essere un po ‘in ritardo per la festa, ma questo funziona molto bene (il nostro professore ce l’ha data)

 public static byte[] asBytes (String s) { String tmp; byte[] b = new byte[s.length() / 2]; int i; for (i = 0; i < s.length() / 2; i++) { tmp = s.substring(i * 2, i * 2 + 2); b[i] = (byte)(Integer.parseInt(tmp, 16) & 0xff); } return b; //return bytes }