Convertir un caractère en valeur numérique ASCII en Java

174

J'ai String name = "admin";
alors je faisString char = name.substring(0,1); //char="a"

Je veux convertir le charen sa valeur ASCII (97), comment puis-je faire cela en java?

Celta
la source
2
JW String charcompilera jamais. Peut-être voulez-vous renommer la variable enString ch
Vikas Prasad
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.
SudoRahul
la source
4
@VKSingla - A convenu que ce n'est pas nécessaire, mais cela améliore la lisibilité et aidera le PO à comprendre.
SudoRahul
1
Pourquoi créer une autre variable char? Même si vous voulez le casting, pourquoi ne pas le faire de cette façon? int ascii = (int)name.charAt(0);
Ricardo Cacheira
@RJ - ok je n'y avais pas pensé
Ricardo Cacheira
9
Les caractères ASCII ont des codes 7 bits de 0 à 127. Donc pas besoin d'utiliser int. byte peut parfaitement stocker n'importe quel code.
Yahor
Je cherchais à convertir l'int en char, l'indice de distribution m'a aidé à faire l'inverse de la réponse.
Isidro Serrano Pineda
49

juste une approche différente

    String s = "admin";
    byte[] bytes = s.getBytes("US-ASCII");

bytes[0] représentera ascii de a .. et donc les autres caractères du tableau entier.

stinepike
la source
20

Au lieu de cela:

String char = name.substring(0,1); //char="a"

Vous devez utiliser la charAt()méthode.

char c = name.charAt(0); // c='a'
int ascii = (int)c;
christophe
la source
4
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.

Raedwald
la source
2
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 else

    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray())
    sb.append((int)c);

    BigInteger mInt = new BigInteger(sb.toString());
    System.out.println(mInt);

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.

user1721904
la source
5

Convertissez le caractère en int.

    String name = "admin";
    int ascii = name.toCharArray()[0];

Aussi :

int ascii = name.charAt(0);
Vineet Singla
la source
3

Il suffit de convertir le caractère en int.

char character = 'a';
int number = (int) character;

La valeur de numbersera 97.

Daniel Lerps
la source
2
public class Ascii {
    public static void main(String [] args){
        String a=args[0];
        char [] z=a.toCharArray();
        for(int i=0;i<z.length;i++){ 
            System.out.println((int)z[i]);
        }
    }
}
yeswanth g
la source
3
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.

String name = "admin";
int ascii = name.charAt(0);
Ricardo Cacheira
la source
1

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

public class CheckChValue {  // Class name
public static void main(String[] args) { // class main

    String name = "admin"; // String to check it's value
    int nameLenght = name.length(); // length of the string used for the loop

    for(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 character
        int ascii = (int) character; //convert the first character
        System.out.println(character+" = "+ ascii); // print the character and it's value in ascii
    }
}

}


la source
1
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 sequence
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray())
    sb.append((int)c);

 // store ascii integer string array in large integer
BigInteger mInt = new BigInteger(sb.toString());
System.out.println(mInt);
Sandeepp Sah
la source
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
}
iAsghar Hussain
la source
1

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:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)
Karthik R
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 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
Karthik R
1

Un moyen simple pour cela est:

    int character = 'a';

Si vous imprimez "caractère", vous obtenez 97.

ktlawal
la source
1

Ou vous pouvez utiliser Stream API pour 1 caractère ou une chaîne à partir de Java 1.8:

public class ASCIIConversion {
    public static void main(String[] args) {
        String text = "adskjfhqewrilfgherqifvehwqfjklsdbnf";
        text.chars()
                .forEach(System.out::println);
    }
}
matua
la source
1

en utilisant Java 9 => String.chars ()

String input = "stackoverflow";
System.out.println(input.chars().boxed().collect(Collectors.toList()));

sortie - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]

Anurag_BEHS
la source
0

Vous pouvez vérifier le numéro ASCII avec ce code.

String name = "admin";
char a1 = a.charAt(0);
int a2 = a1;
System.out.println("The number is : "+a2); // the value is 97

Si je me trompe, excuses.

Raúl Vela
la source
0

Si vous voulez la valeur ASCII de tous les caractères d'une chaîne. Vous pouvez utiliser ceci:

String a ="asdasd";
int count =0;
for(int i : a.toCharArray())
    count+=i;

et si vous voulez ASCII d'un seul caractère dans une chaîne, vous pouvez opter pour:

(int)a.charAt(index);
Vikram Singh
la source
0

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 = new int[128]; //this will allocate space with 128byte size.
letters[ascii]++; //increments the value of 97 to 1;
System.out.println("Output:" + ascii); //Outputs 97
System.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

Siddhartha Thota
la source
0

Le moyen le plus simple de le faire est:

Pour toute la chaîne en ASCII:


public class ConvertToAscii{
    public static void main(String args[]){
      String abc = "admin";
      int []arr = new int[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 ascii
          System.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);

susan097
la source
0

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 input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
piyush tyagi
la source