J'utilise le code ci-dessous pour convertir octet chaîne:Convertir octet à chaîne en Java
System.out.println("string " + Byte.toString((byte)0x63));
Pourquoi imprimer "string 99". Comment modifier pour laisser imprimer "chaîne c"?
J'utilise le code ci-dessous pour convertir octet chaîne:Convertir octet à chaîne en Java
System.out.println("string " + Byte.toString((byte)0x63));
Pourquoi imprimer "string 99". Comment modifier pour laisser imprimer "chaîne c"?
La cteur chaîne convient à cette conversion:
System.out.println("string " + new String(new byte[] {0x63}));
@Downvoter des commentaires? – Matten
Parce que la réponse de gustafc a un point très important: Le constructeur String (byte []) utilise le codage par défaut du système pour convertir le tableau d'octets en caractères String. Il ne faut pas supposer qu'une valeur d'octet 0x63 est mappée à la lettre 'c'. Par exemple, en UTF-16, la lettre 'c' est représentée par 2 octets de codage, pas un. Cet article de blog développe ceci: http://www.joelonsoftware.com/articles/Unicode.html – tbacker
Vous pouvez utiliser printf
:
System.out.printf("string %c\n", 0x63);
Vous pouvez ainsi créer une chaîne avec une telle mise en forme, en utilisant String#format
:
String s = String.format("string %c", 0x63);
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII"));
Notez en particulier que la conversion des octets en chaînes toujours implique un codage. Si vous ne le spécifiez pas, vous utiliserez l'encodage par défaut de la plate-forme, ce qui signifie que le code peut se casser lors de l'exécution dans des environnements différents.
+1 pour mentionner le codage –
Pour éviter le 'UnsupportedEncodingException' vérifié lancé par ce constructeur, vous voudrez probablement passer en [' StandardCharsets.US_ASCII'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html#US_ASCII) au lieu d'utiliser le nom du jeu de caractères. – gustafc
Vous devez construire une nouvelle chaîne dans un tableau d'octets. Le premier élément de votre byteArray
doit être 0x63
. Si vous souhaitez ajouter d'autres lettres, rendez le byteArray
plus long et ajoutez-les aux indices suivants.
byte[] byteArray = new byte[1];
byteArray[0] = 0x63;
try {
System.out.println("string " + new String(byteArray, "US-ASCII"));
} catch (UnsupportedEncodingException e) {
// TODO: Handle exception.
e.printStackTrace();
}
Notez que spécifier l'encodage finira par jeter un UnsupportedEncodingException
et vous devez gérer cela en conséquence.
Si c'est un seul octet, juste jeté le byte
à un char
et il devrait travailler à être bien dire donner une entité char
correspondant à la valeur codepoint de l'octet donné. Sinon, utilisez le constructeur String
comme mentionné ailleurs.
char ch = (char)0x63;
System.out.println(ch);
vous pouvez utiliser
l'équivalent de caractères à 0x63 est 'c', mais l'octet équivalent à c'est 99
System.out.println("byte "+(char)0x63);
Utiliser caractère au lieu de l'octet:
System.out.println("string " + (char)0x63);
Ou si vous voulez être un puritan Unicode, vous utilisez des points de code:
System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1));
Et si vous aimez le vieux skool US-ASCII "chaque octet est un caractère" idée:
System.out.println("string " + new String(new byte[]{ (byte)0x63 },
StandardCharsets.US_ASCII));
Évitez d'utiliser le constructeur String(byte[])
recommandé dans d'autres réponses; il repose sur le jeu de caractères par défaut. Des circonstances peuvent survenir où 0x63
n'est pas le caractère c.
String str = "0x63";
int temp = Integer.parseInt(str.substring(2, 4), 16);
char c = (char)temp;
System.out.print(c);
Il est impossible de * simplement * convertir un octet en chaîne.[Vous devez utiliser un codage de caractères] (http://stackoverflow.com/questions/10611455/what-is-character-encoding). – Raedwald