Convertir un stream d’int’s en chars en Java

Cela a probablement été répondu autrement, mais comment obtenez-vous la valeur de caractère d’une valeur int?

Plus précisément, je lis un depuis un stream TCP et la méthode .read () des lecteurs retourne un int.

Comment puis-je obtenir un char de ceci?

Si vous essayez de convertir un stream en texte, vous devez savoir quel codage utiliser. Vous pouvez ensuite passer un tableau d’octets dans le constructeur Ssortingng et fournir un jeu de Charset , ou utiliser InputStreamReader avec le jeu de caractères approprié à la place.

Le simple fait de passer de int à char ne fonctionne que si vous voulez ISO-8859-1, si vous lisez directement des octets dans un stream.

EDIT: Si vous utilisez déjà un Reader , alors la valeur renvoyée de read() par char est la bonne solution (après avoir vérifié s’il s’agit de -1 ou non) … mais il est normalement plus efficace et facile d’appeler read(char[], int, int) pour lire un bloc entier de texte à la fois. N’oubliez pas de vérifier la valeur de retour si, pour voir combien de caractères ont été lus.

Peut-être que vous demandez:

 Character.toChars(65) // returns ['A'] 

Plus d’infos: Character.toChars(int codePoint)

Convertit le caractère spécifié (sharepoint code Unicode) en sa représentation UTF-16 stockée dans un tableau de caractères. Si le sharepoint code spécifié est une valeur BMP (Basic Multilingual Plane ou Plane 0), le tableau de caractères résultant a la même valeur que codePoint. Si le sharepoint code spécifié est un sharepoint code supplémentaire, le tableau de caractères résultant a la paire de substitution correspondante.

Cela dépend de ce que vous voulez dire par “convertir un int en char”.

Si vous voulez simplement convertir la valeur dans l’int, vous pouvez la convertir en utilisant la notation de Java:

 int i = 97; // 97 is 'a' in ASCII char c = (char) i; // c is now 'a' 

Si vous voulez dire transformer le nombre entier 1 dans le caractère ‘1’, vous pouvez le faire comme ceci:

 if (i >= 0 && i <= 9) { char c = Character.forDigit(i, 10); .... } 

Si vous voulez simplement convertir int 5 en char ‘5’: (Seulement pour les entiers 0 – 9)

 int i = 5; char c = (char) ('0' + i); // c is now '5'; 

Casting simple:

 int a = 99; char c = (char) a; 

Y a-t-il une raison pour laquelle cela ne fonctionne pas pour vous?

Cette solution fonctionne pour Integer length size = 1.

Integer input = 9; Character.valueOf((char) input.toSsortingng().charAt(0))

si taille> 1, nous devons utiliser pour la boucle et itérer à travers.

La plupart des réponses proposées ici proposent des raccourcis, ce qui peut vous poser de gros problèmes si vous n’avez aucune idée de ce que vous faites. Si vous voulez prendre des raccourcis, vous devez savoir exactement dans quel encodage vos données se trouvent.

UTF-16

Chaque fois que java parle de caractères dans sa documentation, il parle de caractères 16 bits.

Vous pouvez utiliser un DataInputStream , qui dispose de méthodes pratiques. Pour plus d’efficacité, enveloppez-le dans un BufferedReader .

 // eg for sockets DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); char character = readChar(); // no need to cast 

Le fait est que chaque readChar() exécute en fait 2 read et les combine en un caractère 16 bits.

US-ASCII

US-ASCII réserve 8 bits pour encoder 1 caractère. La table ASCII ne décrit que 128 caractères possibles, donc 1 bit est toujours inutilisé.

Vous pouvez simplement effectuer une dissortingbution dans ce cas.

 int input = stream.read(); if (input < 0) throw new EOFException(); char character = (char) input; 

ASCII étendu

UTF-8, Latin-1, ANSI et de nombreux autres encodages utilisent tous les 8 bits. Les premiers 7 bits suivent le tableau ASCII et sont identiques à ceux du codage US-ASCII. Cependant, le 8ème bit offre des caractères différents dans tous ces codages. Donc, les choses deviennent intéressantes.

Si vous êtes un cow-boy et que vous pensez que le 8ème bit n’a pas d’importance (c’est-à-dire que vous ne vous souciez pas des personnages comme "à, é, ç, è, ô ...), vous pouvez vous en tirer facilement.

Cependant, si vous voulez faire cela professionnellement, vous devez TOUJOURS spécifier un jeu de caractères à chaque fois que vous importez / exportez du texte (par exemple, des sockets, des fichiers ...).

Toujours utiliser des jeux de caractères

Soyons sérieux. Toutes les options ci-dessus sont des astuces bon marché. Si vous souhaitez écrire un logiciel flexible, vous devez prendre en charge un jeu de caractères configurable pour importer / exporter vos données. Voici une solution générique:

Lisez vos données à l'aide d'un tampon d' byte[] et convertissez-les en Ssortingng aide d'un paramètre charset .

 byte[] buffer = new byte[1024]; int nrOfBytes = stream.read(buffer); Ssortingng result = new Ssortingng(buffer, nrOfBytes, charset); 

Vous pouvez également utiliser un InputStreamReader qui peut être instancié avec un paramètre charset.

Encore une règle d'or: ne lancez jamais directement un octet dans un personnage. C'est toujours une erreur.

Baser ma réponse sur l’hypothèse que l’utilisateur voulait simplement convertir littéralement un int en char , par exemple

 Input: int i = 5; Output: char c = '5' 

Cela a déjà été répondu ci-dessus, mais si la valeur entière i > 10 , alors il faut utiliser le char array .

 char[] c = Ssortingng.valueOf(i).toCharArray(); 
  int i = 7; char number = Integer.toSsortingng(i).charAt(0); System.out.println(number); 

Cela dépend entièrement de l’encodage des données entrantes.

peut-être pas le plus rapide:

 //for example there is an integer with the value of 5: int i = 5; //getting the char '5' out of it: char c = Ssortingng.format("%s",i).charAt(0); 

La réponse à la conversion de char en int ou en long est simple.

Par exemple: – si vous souhaitez convertir Char ‘0’ en long.

Suivez la dissortingbution simple

 Char ch='0'; Ssortingng convertedChar= Character.toSsortingng(ch); //Convert Char to Ssortingng. Long finalLongValue=Long.parseLong(convertedChar); 

Terminé!!