Como converter String Java em byte ?

Existe alguma maneira de converter String Java para um byte[] ( não o Byte[] a box Byte[] )?

Ao tentar isso:

 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 estou recebendo saídas separadas. Não é possível exibir a primeira saída, pois é uma string gzip.

  ****** [B@38ee9f13 

O segundo é um endereço. Existe alguma coisa que eu esteja fazendo errado? Eu preciso do resultado em um byte[] para alimentá-lo com o descompactador gzip, que é o seguinte.

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

O object que seu método decompressGZIP() precisa é um byte[] .

Portanto, a resposta básica e técnica para a pergunta que você fez é:

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

No entanto, o problema com o qual você parece estar lutando é que isso não aparece muito bem. Chamar toString() apenas fornecerá o Object.toString() padrão, que é o nome da class + endereço de memory. Em seu resultado [B@38ee9f13 , [B significa byte[] e 38ee9f13 é o endereço de memory, separado por @ .

Para fins de exibição, você pode usar:

 Arrays.toString(bytes); 

Mas isso será exibido apenas como uma sequência de inteiros separados por vírgula, que pode ou não ser o que você deseja.

Para obter uma String legível de volta de um byte[] , use:

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

A razão pela qual a versão Charset é favorecida, é que todos os objects String em Java são armazenados internamente como UTF-16. Ao converter para um byte[] você obterá uma divisão diferente de bytes para os glifos dados dessa String , dependendo do conjunto de caracteres escolhido.

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

Tente usar String.getBytes (). Ele retorna um byte [] representando os dados da string. Exemplo:

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

Simplesmente:

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

Você pode usar String.getBytes() que retorna a matriz byte[] .

Você pode querer tentar 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)); } } 

Não é necessário alterar o java como um parâmetro String. Você tem que alterar o código c para receber uma String sem um ponteiro e no seu código:

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

Eu sei que estou um pouco atrasado para a festa, mas isso funciona muito bem (nosso professor deu para nós)

 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 }