ASCII? Etes-vous sûr que c'est ce que vous voulez? Java utilise le codage de caractères UTF-16 du jeu de caractères Unicode (tout comme JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API,…). Les réponses se répartissent en plusieurs catégories: répondre explicitement à l'ASCII, répondre à l'UTF-16 et répondre à l'ASCII via plusieurs sauts raccourcis depuis UTF-16 (et certains sont tout simplement faux).
Tom Blodget
Réponses:
298
Très simple. Jetez simplement votre charcomme un int.
char character ='a';int ascii =(int) character;
Dans votre cas, vous devez d'abord obtenir le caractère spécifique de la chaîne, puis le lancer.
char character = name.charAt(0);// This gives the character 'a'int ascii =(int) character;// ascii is now 97.
Bien que la conversion ne soit pas requise explicitement, elle améliore la lisibilité.
int ascii = character;// Even this will do the trick.
Juste pour se rappeler que "char" est un mot réservé en Java.
froid
12
Les nombreuses réponses qui prétendent montrer comment faire cela sont toutes fausses car les caractères Java ne sont pas des caractères ASCII. Java utilise un codage multi-octets de caractères Unicode. Le jeu de caractères Unicode est un super jeu d'ASCII. Il peut donc y avoir des caractères dans une chaîne Java qui n'appartiennent pas à ASCII. Ces caractères n'ont pas de valeur numérique ASCII, il est donc impossible de demander comment obtenir la valeur numérique ASCII d'un caractère Java.
Mais pourquoi voulez-vous faire ça de toute façon? Qu'allez-vous faire de la valeur?
Si vous voulez la valeur numérique afin de pouvoir convertir la chaîne Java en chaîne ASCII, la vraie question est "comment encoder une chaîne Java en ASCII". Pour cela, utilisez l'objet StandardCharsets.US_ASCII.
Réponse parfaite. La fonte de caractères n'est qu'un raccourci qui n'est pas précis. Heureux que votre réponse soit venue au début pour que les gens ne comprennent pas mal le concept.
Karthik R
La raison pour laquelle j'ai besoin de connaître la chaîne ASCII est que des données Unicode entrent dans un processus de backend qui doit placer de l'ASCII pur ailleurs, et j'en ai besoin lorsque je reçois des données non Unicode. Habituellement, lorsque les utilisateurs copient-collent depuis MS Word (par exemple, guillemets doubles et simples courbes, longs tirets, etc.). Mentionner StandardCharsets.US_ASCII est la bonne chose à faire, mais cela ne dit pas au questionneur d'origine comment l'utiliser.
Tihamer
public static String displayAsciiCode (String s, booléen useStandard) {String r = ""; byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); pour (int i = 0; i <ascii.length; i ++) {octet b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); pour (int i = 0; i <ascii.length; i ++) {octet b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer
Appelez ce qui précède avec: String string = "Ceci" est "étrange"; System.out.println ("strings =" + chaîne); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Le résultat est: strings = Ceci "est" étrange T = 84 h = 104 i = 105 s = 115 = 32 "= 63 i = 105 s = 115" = 63 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101 T = 84 h = 104 i = 105 s = 115 = 32 ¬ = -30 タ = -128 ワ = -100 i = 105 s = 115 ¬ = -30 タ = -128ン = -99 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101
Tihamer
10
Si vous souhaitez convertir la chaîne entière en valeurs ASCII concaténées, vous pouvez utiliser ceci -
String str ="abc";// or anything elseStringBuilder sb =newStringBuilder();for(char c : str.toCharArray())
sb.append((int)c);BigInteger mInt =newBigInteger(sb.toString());System.out.println(mInt);
Bien que cet extrait de code puisse résoudre la question, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
DimaSan
1
C'est simple, obtenez le caractère que vous voulez et convertissez-le en int.
Je sais que cela a déjà été répondu sous plusieurs formes, mais voici mon bout de code avec un regard pour parcourir tous les caractères.
Voici le code, commencé par la classe
publicclassCheckChValue{// Class namepublicstaticvoid main(String[] args){// class mainString name ="admin";// String to check it's valueint nameLenght = name.length();// length of the string used for the loopfor(int i =0; i < nameLenght ; i++){// while counting characters if less than the length add one char character = name.charAt(i);// start on the first characterint ascii =(int) character;//convert the first characterSystem.out.println(character+" = "+ ascii);// print the character and it's value in ascii}}
Java utilise Unicode pour stringet char. Une unité textuelle en Unicode est un graphème, qui est un point de code de base suivi de zéro ou plusieurs points de code de combinaison. Un point de code, en Java, est codé en UTF-16, ce qui peut nécessiter une ou deux unités de code 16 bits ( char) pour un point de code. Pour itérer des points de code, consultez cette réponse . Le code devrait déjà être prêt pour la prochaine main U + 1F91E AVEC INDEX ET POINT DE CODE CROISÉ, par exemple.
Tom Blodget
1
String str ="abc";// or anything else// Stores strings of integer representations in sequenceStringBuilder sb =newStringBuilder();for(char c : str.toCharArray())
sb.append((int)c);// store ascii integer string array in large integerBigInteger mInt =newBigInteger(sb.toString());System.out.println(mInt);
Bien que ce code puisse répondre à la question, il est préférable d'expliquer ce qu'il fait et d'y ajouter quelques références.
Hamid Pourjam
1
String name ="admin";char[] ch = name.toString().toCharArray();//it will read and store each character of String and store into char[].for(int i=0; i<ch.length; i++){System.out.println(ch[i]+"-->"+(int)ch[i]);//this will print both character and its value}
Comme @Raedwald l'a souligné, l'Unicode de Java ne prend pas en charge tous les caractères pour obtenir une valeur ASCII. La méthode correcte (Java 1.7+) est la suivante:
new String(byte[])utilise encore un autre codage de caractères - le soi-disant système par défaut, qui varie selon le temps, les machines et les utilisateurs; presque jamais utile. Ce que vous appelez asciiStringest toujours UTF-16 parce que c'est tout ce que Java a.
Tom Blodget
@TomBlodget, je suis d'accord. Mais je pense qu'OP voulait savoir comment obtenir la représentation ASCII d'un personnage donné. Ceci est juste un encodage car java ne peut pas faire de l'ASCII brut
J'essayais la même chose, mais la meilleure et la meilleure solution serait d'utiliser charAt et pour accéder aux index, nous devrions créer un tableau d'entiers de [128] taille.
String name ="admin";int ascii = name.charAt(0);int[] letters =newint[128];//this will allocate space with 128byte size.
letters[ascii]++;//increments the value of 97 to 1;System.out.println("Output:"+ ascii);//Outputs 97System.out.println("Output:"+ letters[ascii]);//Outputs 1 if you debug you'll see 97th index value will be 1.
Si vous souhaitez afficher les valeurs ascii de la chaîne complète, vous devez le faire.
String name ="admin";char[] val = name.toCharArray();for(char b: val){int c = b;System.out.println("Ascii value of "+ b +" is: "+ c);}
Votre sortie, dans ce cas, sera: La valeur Ascii de a est: 97 La valeur Ascii de d est: 100 La valeur Ascii de m est: 109 La valeur Ascii de i est: 105 La valeur Ascii de n est: 110
publicclassConvertToAscii{publicstaticvoid main(String args[]){String abc ="admin";int[]arr =newint[abc.length()];System.out.println("THe asscii value of each character is: ");for(int i=0;i<arr.length;i++){
arr[i]= abc.charAt(i);// assign the integer value of character i.e asciiSystem.out.print(" "+arr[i]);}}}
La sortie est:
THe asscii value of each character is:
97 100 109 105 110
Ici, abc.charAt(i)donne le caractère unique du tableau String: Lorsque nous affectons chaque caractère au type entier, le compilateur effectue la conversion de type comme,
arr[i] = (int) character // Here, every individual character is coverted in ascii value
Mais, pour un seul caractère:
String name = admin;
asciiValue = (int) name.charAt(0);// for character 'a'
System.out.println(asciiValue);
Pour cela, nous pourrions tout de suite utiliser les classes String
input.codePointAt(index);
Je voudrais donner une autre suggestion pour convertir l'ensemble de la chaîne en codes ascii correspondants, en utilisant java 8 par exemple, "abcde" en "979899100101".
String char
compilera jamais. Peut-être voulez-vous renommer la variable enString ch
Réponses:
Très simple. Jetez simplement votre
char
comme unint
.Dans votre cas, vous devez d'abord obtenir le caractère spécifique de la chaîne, puis le lancer.
Bien que la conversion ne soit pas requise explicitement, elle améliore la lisibilité.
la source
int ascii = (int)name.charAt(0);
juste une approche différente
bytes[0]
représentera ascii de a .. et donc les autres caractères du tableau entier.la source
Au lieu de cela:
Vous devez utiliser la
charAt()
méthode.la source
Les nombreuses réponses qui prétendent montrer comment faire cela sont toutes fausses car les caractères Java ne sont pas des caractères ASCII. Java utilise un codage multi-octets de caractères Unicode. Le jeu de caractères Unicode est un super jeu d'ASCII. Il peut donc y avoir des caractères dans une chaîne Java qui n'appartiennent pas à ASCII. Ces caractères n'ont pas de valeur numérique ASCII, il est donc impossible de demander comment obtenir la valeur numérique ASCII d'un caractère Java.
Mais pourquoi voulez-vous faire ça de toute façon? Qu'allez-vous faire de la valeur?
Si vous voulez la valeur numérique afin de pouvoir convertir la chaîne Java en chaîne ASCII, la vraie question est "comment encoder une chaîne Java en ASCII". Pour cela, utilisez l'objet
StandardCharsets.US_ASCII
.la source
Si vous souhaitez convertir la chaîne entière en valeurs ASCII concaténées, vous pouvez utiliser ceci -
dans lequel vous obtiendrez 979899 en sortie.
Le crédit à cela .
Je viens de le copier ici pour que ce soit pratique pour les autres.
la source
Convertissez le caractère en int.
Aussi :
la source
Il suffit de convertir le caractère en int.
La valeur de
number
sera 97.la source
la source
C'est simple, obtenez le caractère que vous voulez et convertissez-le en int.
la source
Je sais que cela a déjà été répondu sous plusieurs formes, mais voici mon bout de code avec un regard pour parcourir tous les caractères.
Voici le code, commencé par la classe
}
la source
string
etchar
. Une unité textuelle en Unicode est un graphème, qui est un point de code de base suivi de zéro ou plusieurs points de code de combinaison. Un point de code, en Java, est codé en UTF-16, ce qui peut nécessiter une ou deux unités de code 16 bits (char
) pour un point de code. Pour itérer des points de code, consultez cette réponse . Le code devrait déjà être prêt pour la prochaine main U + 1F91E AVEC INDEX ET POINT DE CODE CROISÉ, par exemple.la source
la source
Comme @Raedwald l'a souligné, l'Unicode de Java ne prend pas en charge tous les caractères pour obtenir une valeur ASCII. La méthode correcte (Java 1.7+) est la suivante:
la source
new String(byte[])
utilise encore un autre codage de caractères - le soi-disant système par défaut, qui varie selon le temps, les machines et les utilisateurs; presque jamais utile. Ce que vous appelezasciiString
est toujours UTF-16 parce que c'est tout ce que Java a.Un moyen simple pour cela est:
Si vous imprimez "caractère", vous obtenez 97.
la source
Ou vous pouvez utiliser Stream API pour 1 caractère ou une chaîne à partir de Java 1.8:
la source
en utilisant Java 9 => String.chars ()
sortie - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
la source
Vous pouvez vérifier le numéro ASCII avec ce code.
Si je me trompe, excuses.
la source
Si vous voulez la valeur ASCII de tous les caractères d'une chaîne. Vous pouvez utiliser ceci:
et si vous voulez ASCII d'un seul caractère dans une chaîne, vous pouvez opter pour:
la source
J'essayais la même chose, mais la meilleure et la meilleure solution serait d'utiliser charAt et pour accéder aux index, nous devrions créer un tableau d'entiers de [128] taille.
Si vous souhaitez afficher les valeurs ascii de la chaîne complète, vous devez le faire.
Votre sortie, dans ce cas, sera: La valeur Ascii de a est: 97 La valeur Ascii de d est: 100 La valeur Ascii de m est: 109 La valeur Ascii de i est: 105 La valeur Ascii de n est: 110
la source
Le moyen le plus simple de le faire est:
Pour toute la chaîne en ASCII:
La sortie est:
THe asscii value of each character is: 97 100 109 105 110
Ici,
abc.charAt(i)
donne le caractère unique du tableau String: Lorsque nous affectons chaque caractère au type entier, le compilateur effectue la conversion de type comme,arr[i] = (int) character // Here, every individual character is coverted in ascii value
Mais, pour un seul caractère:
String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);
la source
Pour cela, nous pourrions tout de suite utiliser les classes String
Je voudrais donner une autre suggestion pour convertir l'ensemble de la chaîne en codes ascii correspondants, en utilisant java 8 par exemple, "abcde" en "979899100101".
la source