Konwertuj znak na wartość liczbową ASCII w java


174

Mam String name = "admin";
to robięString char = name.substring(0,1); //char="a"

Chcę przekonwertować na charjego wartość ASCII (97), jak mogę to zrobić w java?


2
JW String charkiedykolwiek się skompiluje. Być może zechcesz zmienić nazwę zmiennej naString ch
Vikas Prasad

ASCII? Czy na pewno tego chcesz? Java używa kodowania znaków UTF-16 zestawu znaków Unicode (podobnie jak JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API,…). Odpowiedzi dzielą się na kilka kategorii: udzielanie odpowiedzi bezpośrednio na temat ASCII, odpowiadanie na temat UTF-16 i odpowiadanie na temat ASCII za pomocą kilku skrótów z UTF-16 (a także niektóre są po prostu błędne).
Tom Blodget

Odpowiedzi:


296

Bardzo prosty. Po prostu rzuć charjako int.

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

W twoim przypadku musisz najpierw pobrać konkretną postać ze sznurka, a następnie ją rzucić.

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

Chociaż rzutowanie nie jest wymagane jawnie, ale poprawia czytelność.

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

4
@VKSingla - Zgodził się, że nie jest to wymagane, ale poprawia czytelność i pomoże OP w zrozumieniu.
SudoRahul

1
Po co tworzyć kolejną zmienną char? Nawet jeśli chcesz obsady, dlaczego nie zrobić tego w ten sposób? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ - ok Nie myślałem o tym
Ricardo Cacheira

9
Znaki ASCII mają 7-bitowe kody od 0 do 127. Nie ma więc potrzeby używania int. bajt może doskonale przechowywać dowolny kod.
Yahor

Chciałem zamienić int na char, podpowiedź obsady pomogła mi zrobić to odwrotnie niż odpowiedź.
Isidro Serrano Pineda

49

po prostu inne podejście

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

bytes[0] będzie reprezentować ascii a .., a tym samym inne znaki w całej tablicy.


20

Zamiast tego:

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

Powinieneś użyć charAt()metody.

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

4
Wystarczy pamiętać, że „char” to zarezerwowane słowo w Javie.
Zimno

12

Kilka odpowiedzi, które rzekomo pokazują, jak to zrobić, jest błędnych, ponieważ znaki Java nie są znakami ASCII. Java wykorzystuje wielobajtowe kodowanie znaków Unicode. Zestaw znaków Unicode to super zestaw znaków ASCII. Zatem w ciągu Java mogą znajdować się znaki, które nie należą do ASCII. Takie znaki nie mają wartości liczbowej ASCII, więc nie można odpowiedzieć na pytanie, jak uzyskać wartość liczbową ASCII znaku Java.

Ale dlaczego tak czy owak chcesz to zrobić? Co zamierzasz zrobić z wartością?

Jeśli chcesz mieć wartość liczbową, aby móc przekonwertować ciąg Java na ciąg ASCII, prawdziwe pytanie brzmi: „jak zakodować ciąg Java jako ASCII”. W tym celu użyj obiektu StandardCharsets.US_ASCII.


2
Doskonała odpowiedź. Rzutowanie czcionek to tylko skrót, który nie jest dokładny. Cieszę się, że twoja odpowiedź pojawiła się na początku, aby ludzie nie zrozumieli źle koncepcji.
Karthik R

Powodem, dla którego muszę znać ciąg znaków ASCII, jest to, że otrzymałem dane Unicode wchodzące do procesu zaplecza, który musi umieścić czysty ASCII w innym miejscu i muszę to zrobić, gdy otrzymuję kod inny niż Unicode. Zwykle, gdy użytkownicy kopiują wklejanie z MS Word (np. Zakrzywione podwójne i pojedyncze cudzysłowy, długie myślniki itp.). Wspominanie o StandardCharsets.US_ASCII jest właściwą rzeczą do zrobienia, ale to nie mówi pierwotnemu pytającemu, jak go używać.
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

Wywołaj powyższe z: String string = "To jest" dziwne "; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Wynik to: stringi = To „jest” dziwne 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

Jeśli chcesz przekonwertować cały ciąg na połączone wartości ASCII, możesz użyć tego -

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

gdzie otrzymasz wynik 979899.

Kredyt na to .

Po prostu skopiowałem to tutaj, aby było wygodne dla innych.


5

Przekonwertuj znak na int.

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

Również :

int ascii = name.charAt(0);

3

Po prostu rzuć char na int.

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

Wartość numberwyniesie 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
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
DimaSan,

1

To proste, pobierz żądaną postać i przekonwertuj ją na int.

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

1

Wiem, że odpowiedź na to pytanie została już udzielona w kilku formach, ale oto mój fragment kodu, który ma przejrzeć wszystkie znaki.

Oto kod, rozpoczęty od klasy

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 używa Unicode dla stringi char. Jednostką tekstową w Unicode jest grafem, który jest podstawowym punktem kodowym, po którym następuje zero lub więcej łączących punktów kodowych. Punkt kodowy w Javie jest kodowany w UTF-16, co może wymagać jednej lub dwóch 16-bitowych jednostek kodu ( char) dla punktu kodowego. Aby dokonać iteracji punktów kodowych, zobacz tę odpowiedź . Kod powinien być już gotowy na przykład dla nadchodzącej RĘKI U + 1F91E Z INDEKSEM I SKRZYŻOWANYMI ŚRODKOWYMI PALCAMI.
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);

Chociaż ten kod może odpowiedzieć na pytanie, lepiej jest wyjaśnić, co robi i dodać do niego odniesienia.
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

Jak zauważył @Raedwald, Java Unicode nie obsługuje wszystkich znaków, aby uzyskać wartość ASCII. Prawidłowy sposób (Java 1.7+) jest następujący:

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

new String(byte[])stosuje jeszcze inne kodowanie znaków - tak zwane domyślne systemowe, które różnią się w zależności od czasu, maszyn i użytkowników; prawie nigdy nie przydatne. To, co nazywasz, asciiStringto nadal UTF-16, ponieważ to wszystko, co ma Java.
Tom Blodget,

@TomBlodget, zgadzam się. Ale myślę, że OP chciał wiedzieć, jak uzyskać reprezentację ASCII danej postaci. To tylko kodowanie, ponieważ java nie może wykonać surowego ASCII
Karthik R

1

Prostym sposobem na to jest:

    int character = 'a';

Jeśli wydrukujesz „znak”, otrzymasz 97.


1

Lub możesz użyć Stream API dla 1 znaku lub ciągu zaczynającego się od Java 1.8:

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

1

przy użyciu Java 9 => String.chars ()

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

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


0

Za pomocą tego kodu możesz sprawdzić numer ASCII.

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

Jeśli się mylę, przepraszam.


0

Jeśli chcesz uzyskać wartość ASCII wszystkich znaków w łańcuchu. Możesz użyć tego:

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

a jeśli chcesz ASCII pojedynczego znaku w łańcuchu, możesz wybrać:

(int)a.charAt(index);

0

Próbowałem tego samego, ale najlepszym i łatwym rozwiązaniem byłoby użycie charAt i aby uzyskać dostęp do indeksów, powinniśmy utworzyć tablicę liczb całkowitych o rozmiarze [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.

W przypadku, gdy chcesz wyświetlić wartości ascii pełnego ciągu, musisz to zrobić.

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

Twój wynik w tym przypadku będzie wyglądał następująco: Ascii wartość a wynosi: 97 Ascii wartość d wynosi: 100 Ascii wartość m wynosi: 109 Ascii wartość i wynosi: 105 Ascii wartość n wynosi: 110


0

Najłatwiej to zrobić:

Dla całego łańcucha do 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]);
      }
    }
}


Wynik to:

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


Tutaj abc.charAt(i)daje pojedynczy znak tablicy String: Kiedy przypisujemy każdy znak do typu całkowitego, kompilator wykonuje konwersję typów jako,

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

Ale dla pojedynczego znaku:

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


0

Do tego moglibyśmy od razu użyć klas String

    input.codePointAt(index);

Chciałbym dać jeszcze jedną sugestię, aby przekonwertować cały ciąg znaków na odpowiadające mu kody ascii, używając na przykład języka java 8, „abcde” na „979899100101”.

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.