166 votes

Convertir un int en char en java

Vous trouverez ci-dessous un extrait de code,

int a = 1;
char b = (char) a;
System.out.println(b);

Mais ce que j'obtiens est une sortie vide.

int a = '1';
char b = (char) a;
System.out.println(b);

Je vais obtenir 1 comme résultat.

Quelqu'un peut-il expliquer cela ? Et si je veux convertir un int en char comme dans le premier extrait, que dois-je faire ?

137voto

jh314 Points 12532
int a = 1;
char b = (char) a;
System.out.println(b);

imprimera le caractère avec Point de code Unicode 1 (char de début d'en-tête, qui n'est pas imprimable ; voir ce tableau : C0 Contrôles et latin de base (comme pour l'ASCII)

int a = '1';
char b = (char) a;
System.out.println(b);

imprimera le caractère avec le point de code Unicode 49 (un correspondant à '1').

Si vous voulez convertir un chiffre (0-9), vous pouvez lui ajouter 48 et le lancer, ou quelque chose du genre Character.forDigit(a, 10); .

Si vous voulez convertir un int vu comme un point de code Unicode, vous pouvez utiliser Character.toChars(48) par exemple.

81voto

Haggra Points 792

Ma réponse est similaire à celle de jh314 mais je vais l'expliquer un peu plus en profondeur.

Ce que vous devez faire dans ce cas est :

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

Ici, nous avons utilisé '0' parce que les caractères sont en fait représentés par des valeurs ASCII. Le '0' est un caractère et est représenté par la valeur 48.

Nous avons tapé (a + '0') et pour les additionner, Java a converti le '0' en sa valeur ASCII qui est 48 et a est 1, la somme est donc 49. Alors ce que nous avons fait est :

(char)(49)

Nous avons casté int a char . L'équivalent ASCII de 49 est '1'. Vous pouvez convertir n'importe quel chiffre en caractère de cette façon. C'est une façon plus intelligente et plus efficace que d'utiliser la fonction .toString() puis en soustrayant le chiffre par .charAt() méthode.

49voto

On dirait que vous cherchez le Character.forDigit méthode :

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

Il existe également une méthode qui permet de convertir un char en int :

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Notez qu'en modifiant le RADIX vous pouvez aussi prendre en charge l'hexadécimal (radix 16) et tout radix jusqu'à 36 (ou Character.MAX_RADIX comme on l'appelle aussi).

11voto

3ryck Points 179
int a = 1;
char b = (char) a;
System.out.println(b);

hola, j'ai rencontré le même problème mais ce que j'ai fait c'est le code suivant.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

Avec ceci vous obtenez la valeur décimale comme un type char. J'ai utilisé charAt() avec l'index 0 parce que la seule valeur dans cette chaîne est 'a' et comme vous le savez, la position de 'a' dans cette chaîne commence à 0.

Désolé si mon anglais n'est pas bien expliqué, j'espère que cela vous aidera.

5voto

Vous pouvez vouloir qu'il soit imprimé comme '1' ou comme 'a'.

Dans le cas où vous voulez '1' comme entrée, alors :

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

Dans le cas où vous voulez 'a' comme entrée, alors :

int a = 1;
char b = (char)(a-1 + 'a');
System.out.println(b);

java transforme la valeur ascii en char :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X