Converti il ​​carattere in ASCII valore numerico in Java


174

L'ho fatto String name = "admin";
alloraString char = name.substring(0,1); //char="a"

Voglio convertire il charsuo valore ASCII (97), come posso farlo in Java?


2
JW verrà String charmai compilato. Forse vuoi rinominare la variabile inString ch
Vikas Prasad il

ASCII? Sei sicuro che sia quello che vuoi? Java utilizza la codifica dei caratteri UTF-16 del set di caratteri Unicode (proprio come JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API, ...). Le risposte rientrano in diverse categorie: rispondere esplicitamente a ASCII, rispondere a UTF-16 e rispondere a ASCII attraverso diversi salti di shortcut da UTF-16 (e anche alcuni sono semplicemente sbagliati).
Tom Blodget,

Risposte:


297

Molto semplice. Trasmetti il ​​tuo charcome int.

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

Nel tuo caso, devi prima ottenere il personaggio specifico dalla stringa e poi lanciarlo.

char character = name.charAt(0); // This gives the character 'a'
int ascii = (int) character; // ascii is now 97.

Sebbene il cast non sia richiesto esplicitamente, ma migliora la leggibilità.

int ascii = character; // Even this will do the trick.

4
@VKSingla: concordato che non è necessario, ma migliora la leggibilità e aiuterà l'OP a comprendere.
SudoRahul,

1
Perché creare un'altra variabile char? Anche se vuoi il cast, perché non farlo in questo modo? int ascii = (int)name.charAt(0);
Ricardo Cacheira,

@RJ - ok non ci avevo pensato
Ricardo Cacheira

9
I caratteri ASCII hanno codici a 7 bit da 0 a 127. Quindi non è necessario utilizzare int. byte può memorizzare perfettamente qualsiasi codice.
Yahor,

Stavo cercando di convertire l'int in char, il suggerimento sul cast mi ha aiutato a fare il contrario dalla risposta.
Isidro Serrano Pineda,

49

solo un approccio diverso

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

bytes[0] rappresenterà ascii di un .. e quindi gli altri caratteri dell'intero array.


20

Invece di questo:

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

Dovresti usare il charAt()metodo

char c = name.charAt(0); // c='a'
int ascii = (int)c;

4
Solo per ricordare che "char" è una parola riservata in Java.
Freddo,

12

Le diverse risposte che pretendono di mostrare come farlo sono tutte sbagliate perché i caratteri Java non sono caratteri ASCII. Java utilizza una codifica multibyte di caratteri Unicode. Il set di caratteri Unicode è un super set di ASCII. Quindi possono esserci caratteri in una stringa Java che non appartengono ad ASCII. Tali caratteri non hanno un valore numerico ASCII, pertanto non è possibile chiedere come ottenere il valore numerico ASCII di un carattere Java.

Ma perché vuoi farlo comunque? Che cosa hai intenzione di fare con il valore?

Se si desidera il valore numerico in modo da poter convertire la stringa Java in una stringa ASCII, la vera domanda è "come codificare una stringa Java come ASCII". Per questo, usa l'oggetto StandardCharsets.US_ASCII.


2
Risposta perfetta La fusione del tipo è solo una scorciatoia che non è accurata. Sono contento che la tua risposta sia arrivata all'inizio in modo che la gente non fraintenda il concetto.
Karthik R,

Il motivo per cui ho bisogno di conoscere la stringa ASCII è perché ho i dati Unicode che entrano in un processo di backend che deve posizionare ASCII puro da qualche altra parte, e devo farlo quando ottengo non Unicode. Di solito quando gli utenti copiano la copia da MS Word (ad esempio virgolette doppie e singole curve, trattini lunghi, ecc.). Per citare StandardCharsets.US_ASCII è la cosa giusta da fare, ma ciò non dice all'interrogatore originale come usarlo.
Tihamer,

public static String displayAsciiCode (String s, boolean useStandard) {String r = ""; byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer,

Chiama quanto sopra con: String string = "Questo“ è ”strano"; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Il risultato è: stringhe = Questo "è" strano 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

Se desideri convertire l'intera stringa in valori ASCII concatenati, puoi utilizzare questo:

    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);

in cui otterrai 979899 come output.

Ringraziamo questo .

L'ho appena copiato qui in modo che sarebbe conveniente per gli altri.


5

Converti il ​​carattere in int.

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

Anche :

int ascii = name.charAt(0);

3

Basta lanciare il carattere su un int.

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

Il valore di numbersarà 97.


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]);
        }
    }
}

3
Mentre questo frammento di codice può risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
DimaSan

1

È semplice, ottieni il personaggio che desideri e convertilo in int.

String name = "admin";
int ascii = name.charAt(0);

1

So che è già stata data risposta in diverse forme, ma ecco il mio codice con uno sguardo per esaminare tutti i personaggi.

Ecco il codice, iniziato con 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
    }
}

}


1
Java utilizza Unicode per stringe char. Un'unità testuale in Unicode è un grafema, che è un punto di codice di base seguito da zero o più punti di combinazione combinati. Un punto di codice, in Java, è codificato in UTF-16, che potrebbe richiedere una o due unità di codice a 16 bit ( char) per un punto di codice . Per iterare i punti di codice, vedere questa risposta . Il codice dovrebbe essere già pronto per l'emergente U + 1F91E MANO CON INDICE E DENTI MEDI CODICE ATTRAVERSO, per esempio.
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);

Sebbene questo codice possa rispondere alla domanda, è meglio spiegare cosa fa e aggiungere alcuni riferimenti ad esso.
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
}

1

Come sottolineato da @Raedwald, Unicode di Java non soddisfa tutti i caratteri per ottenere il valore ASCII. Il modo corretto (Java 1.7+) è il seguente:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)

new String(byte[])utilizza ancora un'altra codifica dei caratteri: il cosiddetto default di sistema, che varia nel tempo, nelle macchine e negli utenti; quasi mai utile. Quello che chiami asciiStringè ancora UTF-16 perché è tutto ciò che Java ha.
Tom Blodget,

@TomBlodget, sono d'accordo. Ma penso che OP volesse sapere come ottenere la rappresentazione ASCII di un determinato personaggio. Questa è solo una codifica poiché java non può eseguire ASCII non
elaborato

1

Un modo semplice per questo è:

    int character = 'a';

Se si stampa "carattere", si ottiene 97.


1

Oppure puoi usare l'API Stream per 1 carattere o una stringa che inizia in Java 1.8:

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

1

utilizzando Java 9 => String.chars ()

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

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


0

Puoi controllare il numero di ASCII con questo codice.

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

Se sbaglio, mi scuso.


0

Se si desidera il valore ASCII di tutti i caratteri in una stringa. Puoi usare questo:

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

e se vuoi ASCII di un singolo carattere in una stringa puoi scegliere:

(int)a.charAt(index);

0

Stavo provando la stessa cosa, ma la soluzione migliore e semplice sarebbe usare charAt e per accedere agli indici dovremmo creare un array intero di dimensioni [128].

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.

Nel caso in cui si desideri visualizzare i valori ASCII di String completa, è necessario eseguire questa operazione.

String name = "admin";
char[] val = name.toCharArray();
for(char b: val) {
 int c = b;
 System.out.println("Ascii value of " + b + " is: " + c);
}

Il tuo output, in questo caso, sarà: Ascii valore di a è: 97 Ascii valore di d è: 100 Ascii valore di m è: 109 Ascii valore di i è: 105 Ascii valore di n è: 110


0

Il modo più semplice per farlo è:

Per l'intera stringa in 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]);
      }
    }
}


L'output è:

THe asscii value of each character is: 97 100 109 105 110


Qui, abc.charAt(i)fornisce il singolo carattere dell'array String: quando assegniamo ciascun carattere al tipo intero, il compilatore digita la conversione come,

arr[i] = (int) character // Here, every individual character is coverted in ascii value

Ma, per singolo personaggio:

String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);


0

Per questo potremmo subito usare String classe's

    input.codePointAt(index);

Vorrei dare un altro suggerimento su come convertire l'intera stringa in corrispondenti codici ASCII, usando java 8 per esempio, "abcde" in "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.