Cela a probablement déjà été répondu ailleurs mais comment obtenez-vous la valeur de caractère d'une valeur int?
Plus précisément, je lis un flux TCP et la méthode .read () du lecteur renvoie un int.
Comment puis-je obtenir un caractère de cela?
Si vous essayez de convertir un flux en texte, vous devez savoir quel codage vous souhaitez utiliser. Vous pouvez ensuite soit passer un tableau d'octets dans le constructeur String
et fournir un Charset
, soit utiliser InputStreamReader
avec le Charset
approprié.
Transmettre simplement int
à char
ne fonctionne que si vous voulez ISO-8859-1, si vous lisez directement des octets à partir d'un flux.
EDIT: Si vous utilisez déjà un Reader
, alors convertir la valeur de retour de read()
en char
est le bon choix (après avoir vérifié si c'est -1 ou non ) ... mais il est normalement plus efficace et pratique d’appeler read(char[], int, int)
pour lire un bloc de texte entier à la fois. N'oubliez pas de vérifier la valeur de retour 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é (point de code Unicode) en sa représentation UTF-16 stockée dans un tableau de caractères. Si le point de code spécifié est une valeur BMP (plan multilingue de base ou plan 0), le tableau de caractères obtenu a la même valeur que codePoint. Si le point de code spécifié est un point de code supplémentaire, le tableau de caractères résultant contient la paire de substitution correspondante.
Cela dépend de ce que vous entendez par "convertir un int en caractère".
Si vous voulez simplement transtyper la valeur dans le int, vous pouvez le lancer en utilisant la notation typecast de Java:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Si vous voulez transformer le nombre entier 1 en caractère '1', procédez comme suit:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Si vous voulez simplement convertir int 5 en caractère '5': (Seulement pour les entiers de 0 à 9)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Coulée simple:
int a = 99;
char c = (char) a;
Y a-t-il une raison pour que cela ne fonctionne pas pour vous?
Cette solution fonctionne pour une longueur de nombre entier = 1.
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
si taille> 1, nous devons utiliser boucle et itérer.
La plupart des réponses proposées ici proposent des raccourcis qui peuvent vous poser de gros problèmes si vous n’avez aucune idée de ce que vous faites. Si vous souhaitez utiliser des raccourcis, vous devez savoir exactement en quel encodage vos données sont stockées.
Chaque fois que Java parle de caractères dans sa documentation, il parle de caractères 16 bits.
Vous pouvez utiliser un DataInputStream
, qui possède des méthodes pratiques. Pour plus d'efficacité, enveloppez-le dans un BufferedReader
.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Le fait est que chaque readChar()
effectuera en réalité 2 read
et les combinera en un caractère de 16 bits.
US-ASCII réserve 8 bits pour coder 1 caractère. La table ASCII ne décrit que 128 caractères possibles, donc 1 bit est toujours inutilisé.
Vous pouvez simplement effectuer un casting dans ce cas.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
Les codages UTF-8, Latin-1, ANSI et de nombreux autres utilisent tous les 8 bits. Les premiers 7 bits suivent la table 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, ici, 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 (par exemple, vous ne vous souciez pas des personnages comme "à, é, ç, è, ô ...), alors vous pouvez vous en sortir. un casting simple.
Cependant, si vous souhaitez le faire de manière professionnelle, vous devez spécifier TOUJOURS un jeu de caractères à chaque fois que vous importez/exportez du texte (par exemple, des sockets, des fichiers, etc.).
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 en utilisant un tampon byte[]
et convertissez-les en un String
en utilisant un paramètre charset.
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
Vous pouvez également utiliser un InputStreamReader
pouvant être instancié avec un paramètre charset.
Encore une règle d'or: ne jamais directement attribuer d'octet à un personnage. C'est toujours une erreur.
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
Fondant 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, cependant si la valeur entière i > 10
, alors il faut utiliser char array
.
char[] c = String.valueOf(i).toCharArray();
Cela dépend entièrement du codage 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 = String.format("%s",i).charAt(0);