Existe-t-il un moyen de convertir Java String
en un byte[]
(non le Byte[]
encadré] _)?
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 l'envoyer au décompresseur gzip, 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());
}
L'objet dont votre méthode decompressGZIP()
a besoin est un byte[]
.
La réponse technique de base à la question que vous avez posée est donc 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 avec lequel vous semblez être confronté est que cela ne s'affiche pas très bien. L'appel de toString()
vous donnera simplement la valeur par défaut Object.toString()
qui est le nom de la classe + l'adresse de la mémoire. Dans votre résultat [B@38ee9f13
, le [B
signifie byte[]
et 38ee9f13
est l'adresse de la mémoire, séparée par un @
.
Pour l'affichage, vous pouvez utiliser:
Arrays.toString(bytes);
Mais cela ne fera que s'afficher sous la forme d'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 une String
lisible d'un byte[]
, utilisez:
String string = new String(byte[] bytes, Charset charset);
Si la version Charset
est privilégiée, tous les objets String
de Java sont stockés en interne sous le format 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.
String example = "Convert Java String";
byte[] bytes = example.getBytes();
Essayez d’utiliser String.getBytes (). Il retourne un octet [] représentant les données de chaîne. Exemple:
String data = "sample data";
byte[] byteData = data.getBytes();
Simplement:
String abc="abcdefghight";
byte[] b = abc.getBytes();
Vous pouvez utiliser String.getBytes()
qui renvoie le tableau byte[]
.
Vous voudrez peut-être essayer return new String(byteout.toByteArray(Charset.forName("UTF-8")))
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 pointeur et dans son code:
Bool DmgrGetVersion (String szVersion);
Char NewszVersion [200];
Strcpy (NewszVersion, szVersion.t_str ());
.t_str () applies to builder c ++ 2010