Cómo convertir Java String en byte ?

¿Hay alguna forma de convertir Java String en un byte[] ( no en el Byte[] )?

Al probar esto:

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

y obtengo salidas separadas No se puede mostrar la primera salida ya que es una cadena gzip.

  ****** [B@38ee9f13 

El segundo es una dirección. ¿Hay algo que estoy haciendo mal? Necesito el resultado en un byte[] para alimentarlo al descompresor gzip, que es el siguiente.

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

El objeto que decompressGZIP() tu decompressGZIP() es un byte[] .

Entonces la respuesta básica y técnica a la pregunta que ha hecho es:

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

Sin embargo, el problema con el que parece estar luchando es que esto no se muestra muy bien. Llamar a toString() simplemente le dará el Object.toString() predeterminado, que es el nombre de clase + dirección de memoria. En su resultado [B@38ee9f13 , [B significa byte[] y 38ee9f13 es la dirección de memoria, separada por @ .

Para fines de visualización puede usar:

 Arrays.toString(bytes); 

Pero esto solo se mostrará como una secuencia de enteros separados por comas, que pueden ser o no lo que quieres.

Para obtener una String legible desde un byte[] , use:

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

La razón por la cual la versión Charset es favorecida, es que todos los objetos String en Java se almacenan internamente como UTF-16. Al convertir a un byte[] obtendrá un desglose de bytes diferente para los glifos dados de esa String , dependiendo del juego de caracteres elegido.

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

Intenta usar String.getBytes (). Devuelve un byte [] que representa datos de cadena. Ejemplo:

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

Simplemente:

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

Puede usar String.getBytes() que devuelve la matriz de byte[] .

Tal vez quieras intentar 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)); } } 

No es necesario cambiar java como un parámetro de cadena. Debes cambiar el código c para recibir una cadena sin puntero y en su código:

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

Sé que llego un poco tarde a la fiesta, pero esto funciona bastante bien (nuestro profesor nos lo dio)

 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 }