Question Comment convertir une chaîne Java en byte []?


Y at-il un moyen de convertir Java String à un byte[] (ne pas la boîte Byte[])?

En essayant ceci:

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

et je reçois des sorties séparées. Impossible d'afficher la première sortie car il s'agit d'une chaîne gzip.

<A Gzip String>
******
[B@38ee9f13

La seconde est une adresse. Y a-t-il quelque chose que je fais mal? J'ai besoin du résultat dans un byte[] pour le nourrir au décompresseur gzip, qui est comme suit.

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

418
2017-09-02 10:40


origine


Réponses:


L'objet votre méthode decompressGZIP() les besoins est un byte[].

La réponse technique de base à la question que vous avez posée est la suivante:

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

Cependant, le problème que vous semblez devoir résoudre est que cela ne s’affiche pas très bien. Appel toString() Je vais juste vous donner la valeur par défaut Object.toString() qui est le nom de la classe + adresse mémoire. Dans votre résultat [B@38ee9f13, la [B veux dire byte[] et 38ee9f13 est l'adresse mémoire, séparée par un @.

A des fins d'affichage, vous pouvez utiliser:

Arrays.toString(bytes);

Mais ceci s'affichera simplement comme une séquence d'entiers séparés par des virgules, ce qui peut être ou ne pas être ce que vous voulez.

Pour obtenir un fichier lisible String de retour d'un byte[], utilisation:

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

La raison pour laquelle Charset la version est favorisée, c'est que tout String Les objets Java sont stockés en interne sous la forme UTF-16. Lors de la conversion en un byte[] vous obtiendrez une répartition différente des octets pour les glyphes donnés de cette String, en fonction du jeu de caractères choisi.


788
2017-09-02 10:46



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

42
2017-09-02 10:45



Essayez d'utiliser String.getBytes (). Il renvoie un octet [] représentant les données de chaîne. Exemple:

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

12
2017-09-02 10:46



Simplement:

String abc="abcdefghight";

byte[] b = abc.getBytes();

12
2017-09-02 10:49



Vous pouvez utiliser String.getBytes() qui renvoie le byte[] tableau.


8
2017-09-02 10:46



Tu pourrais vouloir essayer return new String(byteout.toByteArray(Charset.forName("UTF-8")))


6
2017-11-28 09:39



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

2
2018-01-21 11:28



Il n'est pas nécessaire de changer java en tant que paramètre String. Vous devez changer le code c pour recevoir une chaîne sans un pointeur et dans son code:

Bool DmgrGetVersion (String szVersion);

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

1
2017-08-05 04:23



Je sais que je suis un peu en retard à la fête mais ça marche plutôt bien (notre professeur nous l'a donné)

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
    }

-1
2018-05-09 17:53