Voici un extrait de code,
int a = 1;
char b = (char) a;
System.out.println(b);
Mais ce que j'obtiens, c'est une sortie vide.
int a = '1';
char b = (char) a;
System.out.println(b);
J'obtiendrai 1 comme sortie.
Quelqu'un peut-il expliquer cela? Et si je veux convertir un int en caractère comme dans le premier extrait de code, que dois-je faire?
b = (char)('0' + a)
mais seulement pour0 <= a <= 9
.Réponses:
affichera le caractère avec la valeur ascii 1 (caractère de début d'en-tête, qui n'est pas imprimable).
affichera le caractère avec la valeur ascii 49 (un correspondant à '1')
Si vous souhaitez convertir un chiffre (0-9), vous pouvez y ajouter 48 et lancer, ou quelque chose du genre
Character.forDigit(a, 10);
.Si vous souhaitez convertir une
int
valeur as in ascii, vous pouvez utiliserCharacter.toChars(48)
par exemple.la source
System.out.println('b'+3);
comment puis-je obtenir à lab3
place101
avec println? tout autre moyen à la place printf?Character.toChars
fonctionne sur les points de code Unicode, pas sur les valeurs ASCII. Vous obtenez la même chose (pour BMP uniquement) si vous venez de convertir int en char.Ma réponse est similaire à la réponse de jh314 mais je vais l'expliquer un peu plus en profondeur.
Ce que vous devez faire dans ce cas est:
Ici, nous avons utilisé «0» car les caractères sont en fait représentés par des valeurs ASCII. «0» est un caractère et représenté par la valeur 48.
Nous avons tapé
(a + '0')
et afin de les additionner, Java a converti '0' en sa valeur ASCII qui est 48 et a est 1 donc la somme est 49. Ensuite, ce que nous avons fait est:Nous Casted
int
àchar
. L'équivalent ASCII de 49 est «1». Vous pouvez convertir n'importe quel chiffre en caractère de cette manière et c'est une manière plus intelligente et meilleure que d'utiliser la.toString()
méthode, puis de soustraire le chiffre par la.charAt()
méthode.la source
Il semble que vous cherchiez la
Character.forDigit
méthode:Il existe également une méthode qui permet de convertir un caractère en un entier:
Notez qu'en changeant le,
RADIX
vous pouvez également prendre en charge hexadécimal (base 16) et toute base jusqu'à 36 (ouCharacter.MAX_RADIX
comme on l'appelle également).la source
65
s'imprimeA
? Parce que ma réponse ici imprime le comportement attendu pour les exigences de cette question. Voir ideone.com/09LAFRhola, eh bien j'ai traversé le même problème mais ce que j'ai fait était le code suivant.
Avec cela, vous obtenez la valeur décimale sous forme de type char. J'ai utilisé charAt () avec l'index 0 car 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.
la source
En ASCII, chaque caractère a son propre numéro. Et le caractère «0» vaut 48 pour le nombre décimal, «1» vaut 49, et ainsi de suite. Donc si
la source
Personne n'a répondu à la vraie "question" ici: vous convertissez correctement int en char; dans la table ASCII, une valeur décimale de 01 est "début de titre", un caractère non imprimable. Essayez de rechercher une table ASCII et de convertir une valeur int entre 33 et 7E; cela vous donnera des personnages à regarder.
la source
la source
char
est une unité de code UTF-16. 68 en tant qu'unité de code UTF-16 est la seule unité de code nécessaire pour représenter le point de code Unicode U + 0044 . System.out changera l'encodage du texte sur l'encodage par défaut (probablement correspondant au terminal / console dans lequel le programme s'exécute). println prend un caractère et tente de l'encoder. Puisque le caractère est un point de code complet, il peut essayer. Étant donné que U + 0044 est un caractère dans presque tous les jeux de caractères, il devrait être réussi à le faire parvenir au terminal sans gargarisme. Rien à voir avec ASCII.En java, un char est un int. Votre premier extrait de code imprime le caractère correspondant à la valeur de 1 dans le schéma de codage de caractères par défaut (qui est probablement Unicode). Le caractère Unicode U + 0001 est un caractère non imprimable, c'est pourquoi vous ne voyez aucune sortie.
Si vous souhaitez imprimer le caractère «1», vous pouvez rechercher la valeur de «1» dans le schéma de codage que vous utilisez. En Unicode, il s'agit de 49 (identique à ASCII). Mais cela ne fonctionnera que pour les chiffres 0-9.
Vous feriez peut-être mieux d'utiliser une chaîne plutôt qu'un caractère et d'utiliser la
toString()
méthode intégrée de Java :Cela fonctionnera quel que soit le codage de votre système et fonctionnera pour les nombres à plusieurs chiffres.
la source
si vous souhaitez imprimer des caractères ascii en fonction de leur code ascii et que vous ne voulez pas aller au-delà (comme les caractères unicode), vous pouvez définir votre variable comme un octet, puis utiliser le (char) convert. c'est à dire:
BTW, le code ascii pour la lettre `` A '' est 65
la source
Assurez-vous que la valeur entière est la valeur ASCII d'un alphabet / caractère.
Sinon, faites-le.
puis ajoutez-lui 64 pour qu'il devienne 65 = valeur ASCII de 'A' Puis utilisez
la source
Si nous parlons de types de classes - pas de primitives, l'astuce suivante doit être effectuée:
la source
j'espère que ça aidera au moins quelque chose
la source
Si vous souhaitez convertir un caractère en son entier correspondant, vous pouvez faire quelque chose comme ceci:
Cela se produit car en ASCII, certains éléments ne peuvent pas être imprimés normalement.
Par exemple, les nombres 97 à 122 sont des entiers correspondant aux lettres minuscules de a à z.
la source
la source