Cela a probablement été répondu ailleurs mais comment obtenir la valeur de caractère d'une valeur int?
Plus précisément, je lis un à partir d'un flux tcp et la méthode des lecteurs .read () renvoie un int.
Comment en tirer un caractère?
Cela a probablement été répondu ailleurs mais comment obtenir la valeur de caractère d'une valeur int?
Plus précisément, je lis un à partir d'un flux tcp et la méthode des lecteurs .read () renvoie un int.
Comment en tirer un caractère?
Réponses:
Si vous essayez de convertir un flux en texte, vous devez savoir quel encodage vous souhaitez utiliser. Vous pouvez ensuite passer un tableau d'octets dans le String
constructeur et fournir un Charset
, ou utiliser InputStreamReader
à la Charset
place le tableau approprié .
Le simple cast de int
vers char
ne fonctionne que si vous voulez ISO-8859-1, si vous lisez directement des octets à partir d'un flux.
EDIT: Si vous êtes utilisez déjà Reader
, puis la coulée de la valeur de retour de read()
à char
est la bonne façon de procéder (après avoir vérifié que ce soit -1 ou non) ... mais il est généralement plus efficace et pratique pour appeler read(char[], int, int)
à lire un bloc entier de texte à la fois. N'oubliez pas de vérifier la valeur de retour pour voir combien de caractères ont été lus.
InputStreamReader
dans un BufferedReader
, comme mentionné dans le javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Peut-être que vous demandez:
Character.toChars(65) // returns ['A']
Plus d'informations: 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 (Basic Multilingual Plane ou Plane 0), le tableau de caractères résultant 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 a la paire de substitution correspondante.
toChars
est généralement inappropriée. S'il lit à partir d'un lecteur, c'est bien.
Cela dépend de ce que vous entendez par "convertir un entier en caractère".
Si vous souhaitez simplement convertir la valeur en int, vous pouvez la convertir en utilisant la notation de conversion de type Java:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Si vous voulez dire transformer l'entier 1 en 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': (Uniquement pour les entiers 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 laquelle cela ne fonctionne pas pour vous?
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 souhaitez utiliser des raccourcis, vous devez savoir exactement dans quel encodage se trouvent vos données.
Chaque fois que java parle de caractères dans sa documentation, il parle de caractères 16 bits.
Vous pouvez utiliser a DataInputStream
, qui a des méthodes pratiques. Pour plus d'efficacité, enveloppez-le dans un fichier BufferedReader
.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Le fait est que chacun readChar()
exécutera des 2 read
et les combinera en un caractère 16 bits.
US-ASCII réserve 8 bits pour encoder 1 caractère. Le tableau 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;
UTF-8, Latin-1, ANSI et de nombreux autres encodages utilisent tous les 8 bits. Les 7 premiers bits suivent la table ASCII et sont identiques à ceux du codage US-ASCII. Cependant, le 8ème bit propose des caractères différents dans tous ces encodages. Alors, 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 (c'est-à-dire que vous ne vous souciez pas des personnages comme "à, é, ç, è, ô ...) alors vous pouvez vous en tirer avec un casting simple.
Cependant, si vous voulez faire cela de manière professionnelle, vous devez vraiment TOUJOURS spécifier un jeu de caractères chaque fois que vous importez / exportez du texte (par exemple des sockets, des fichiers ...).
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 byte[]
tampon et convertissez-les en un à l' String
aide d'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
qui peut être instancié avec un paramètre charset.
Encore une règle d'or: ne jetez jamais directement un octet sur 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 besoin d'utiliser char array
.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
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);
La réponse pour la conversion de char en int ou long est la conversion simple.
Par exemple: - si vous souhaitez convertir Char '0' en long.
Suivez un casting simple
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Terminé!!
public int read(char[] cbuf)
résoudra le problème?