Chuyển đổi ký tự thành giá trị số ASCII trong java


174

Tôi có String name = "admin";
rồi tôi làmString char = name.substring(0,1); //char="a"

Tôi muốn chuyển đổi chargiá trị ASCII của nó (97), làm thế nào tôi có thể làm điều này trong java?


2
JW sẽ String charbiên dịch. Có thể bạn muốn đổi tên biến thànhString ch
Vikas Prasad

ASCII? Bạn có chắc chắn đó là những gì bạn muốn? Java sử dụng mã hóa ký tự UTF-16 của bộ ký tự Unicode (giống như JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API, API). Các câu trả lời thuộc nhiều loại: trả lời rõ ràng về ASCII, trả lời về UTF-16 và trả lời về ASCII thông qua một số bước nhảy vọt từ UTF-16 (và một số chỉ đơn giản là sai).
Tom Blodget

Câu trả lời:


295

Rất đơn giản. Chỉ cần đúc của bạn charnhư là một int.

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

Trong trường hợp của bạn, trước tiên bạn cần lấy Ký tự cụ thể từ Chuỗi và sau đó bỏ nó.

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

Mặc dù diễn viên không được yêu cầu rõ ràng, nhưng nó cải thiện khả năng đọc.

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

4
@VKSingla - Đồng ý không cần thiết, nhưng nó cải thiện khả năng đọc và sẽ giúp OP hiểu.
SudoRahul

1
Tại sao tạo một biến char khác? Ngay cả khi bạn muốn các diễn viên tại sao không làm theo cách này? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ - ok Tôi đã không nghĩ về nó
Ricardo Cacheira

9
Các ký tự ASCII có mã 7 bit từ 0 đến 127. Vì vậy, không cần sử dụng int. byte hoàn toàn có thể lưu trữ bất kỳ mã nào.
Yahor

Tôi đang tìm cách chuyển đổi int thành char, gợi ý diễn viên đã giúp tôi làm điều đó theo cách khác từ câu trả lời.
Isidro Serrano Pineda

49

chỉ là một cách tiếp cận khác

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

bytes[0] sẽ đại diện cho ascii của a .. và do đó các ký tự khác trong toàn bộ mảng.


20

Thay vì điều này:

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

Bạn nên sử dụng charAt()phương pháp.

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

4
Chỉ cần nhớ rằng "char" là một từ dành riêng trong Java.
Lạnh

12

Một số câu trả lời có ý định chỉ ra cách thực hiện điều này đều sai vì các ký tự Java không phải là ký tự ASCII. Java sử dụng mã hóa đa chuỗi các ký tự Unicode. Bộ ký tự Unicode là một bộ siêu mã ASCII. Vì vậy, có thể có các ký tự trong chuỗi Java không thuộc ASCII. Các ký tự như vậy không có giá trị số ASCII, vì vậy, hỏi làm thế nào để có được giá trị số ASCII của một ký tự Java là không thể trả lời được.

Nhưng tại sao bạn vẫn muốn làm điều này? Bạn sẽ làm gì với giá trị?

Nếu bạn muốn giá trị số để bạn có thể chuyển đổi Chuỗi Java thành chuỗi ASCII, câu hỏi thực sự là "làm cách nào để mã hóa Chuỗi Java thành ASCII". Đối với điều đó, sử dụng các đối tượng StandardCharsets.US_ASCII.


2
Câu trả lời hoàn hảo. Kiểu đúc chỉ là một đoạn ngắn không chính xác. Rất vui vì câu trả lời của bạn đã bắt đầu để mọi người không hiểu nhầm khái niệm.
Karthik R

Lý do tôi cần biết chuỗi ASCII là vì tôi đã có dữ liệu Unicode vào quy trình phụ trợ cần đặt ASCII thuần túy ở một nơi khác và tôi cần khi tôi không nhận được Unicode. Thông thường khi người dùng sao chép dán từ MS Word (ví dụ: dấu ngoặc kép và dấu ngoặc đơn, dấu gạch ngang dài, v.v.). Để đề cập đến StandardCharsets.US_ASCII là điều cần làm, nhưng điều đó không cho người hỏi ban đầu biết cách sử dụng nó.
Tihamer

Hiển thị chuỗi tĩnh công khaiAsciiCode (Chuỗi s, boolean useSt Chuẩn) {String r = ""; byte [] ascii = null; if (useSt Chuẩn) {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; }} khác {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Ký tự.toString ((char) ascii [i]) + "=" + (int) b; }} trả lại r; }
Tihamer

Gọi ở trên với: String string = "This là is lạ lạ"; System.out.println ("chuỗi =" + chuỗi); System.out.println (displayAsciiCode (chuỗi, true)); System.out.println (displayAsciiCode (chuỗi, sai)); Kết quả là: chuỗi = Đây là một số lạ T = 84 h = 104 i = 105 s = 115 = 32 Road = 63 i = 105 s = 115 tựa = 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

Nếu bạn muốn chuyển đổi toàn bộ chuỗi thành các giá trị ASCII được nối thì bạn có thể sử dụng chuỗi này -

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

trong đó bạn sẽ nhận được 979899 làm đầu ra.

Tín dụng này .

Tôi chỉ sao chép nó ở đây để nó thuận tiện cho người khác.


5

Chuyển đổi char thành int.

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

Cũng thế :

int ascii = name.charAt(0);

3

Chỉ cần bỏ char đến một int.

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

Giá trị của numbersẽ là 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
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
DimaSan

1

Thật đơn giản, có được nhân vật bạn muốn và chuyển đổi nó thành int.

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

1

Tôi biết điều này đã được trả lời dưới nhiều hình thức nhưng đây là đoạn mã của tôi với một cái nhìn để đi qua tất cả các ký tự.

Đây là mã, bắt đầu với lớp

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 sử dụng Unicode cho stringchar. Một đơn vị văn bản trong Unicode là một biểu đồ, là một điểm mã cơ sở theo sau là các điểm mã kết hợp bằng 0 hoặc nhiều hơn. Một điểm mã, trong Java, được mã hóa bằng UTF-16, có thể yêu cầu một hoặc hai đơn vị mã 16 bit ( char) cho một điểm mã. Để lặp lại các điểm mã, xem câu trả lời này . Mã đã sẵn sàng cho ví dụ TAY UF 1F91E sắp ra mắt với mật mã INDEX VÀ TRUNG GIAN CROSSED, ví dụ.
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);

Trong khi mã này có thể trả lời câu hỏi, tốt hơn là giải thích những gì nó làm và thêm một số tài liệu tham khảo cho nó.
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

Như @Raedwald đã chỉ ra, Unicode của Java không phục vụ cho tất cả các ký tự để nhận giá trị ASCII. Cách chính xác (Java 1.7+) như sau:

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

new String(byte[])sử dụng một ký tự khác mã hóa cho cái gọi là mặc định hệ thống, thay đổi theo thời gian, máy móc và người dùng; hầu như không bao giờ hữu ích. Những gì bạn gọi asciiStringvẫn là UTF-16 vì đó là tất cả Java có.
Tom Blodget

@TomBlodget, tôi đồng ý. Nhưng tôi nghĩ OP muốn biết làm thế nào để có được sự thể hiện ASCII của một nhân vật nhất định. Đây chỉ là một mã hóa vì java không thể thực hiện ASCII thô
Karthik R

1

Một cách dễ dàng cho việc này là:

    int character = 'a';

Nếu bạn in "ký tự", bạn nhận được 97.


1

Hoặc bạn có thể sử dụng API Stream cho 1 ký tự hoặc Chuỗi bắt đầu trong Java 1.8:

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

1

sử dụng Java 9 => String.chars ()

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

đầu ra - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]


0

Bạn có thể kiểm tra số ASCII hungs với mã này.

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

Nếu tôi sai, xin lỗi.


0

Nếu bạn muốn giá trị ASCII của tất cả các ký tự trong Chuỗi. Bạn có thể sử dụng điều này:

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

và nếu bạn muốn ASCII của một ký tự trong Chuỗi, bạn có thể tìm:

(int)a.charAt(index);

0

Tôi đã thử điều tương tự, nhưng giải pháp tốt nhất và dễ dàng nhất là sử dụng charAt và để truy cập các chỉ mục, chúng ta nên tạo một mảng số nguyên có kích thước [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.

Trong trường hợp nếu bạn muốn hiển thị các giá trị ascii của Chuỗi hoàn chỉnh, bạn cần thực hiện việc này.

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

Đầu ra của bạn, trong trường hợp này, sẽ là: Giá trị Ascii của a là: 97 Giá trị Ascii của d là: 100 Giá trị Ascii của m là: 109 Giá trị Ascii của i là: 105 Giá trị Ascii của n là: 110


0

Cách dễ dàng để làm điều này là:

Đối với toàn bộ Chuỗi thành 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]);
      }
    }
}


Đầu ra là:

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


Ở đây, abc.charAt(i)đưa ra một ký tự duy nhất của mảng String: Khi chúng ta gán từng ký tự cho kiểu số nguyên thì trình biên dịch thực hiện chuyển đổi kiểu như,

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

Nhưng, đối với nhân vật duy nhất:

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


0

Để làm điều này, chúng ta có thể sử dụng String classe's ngay lập tức

    input.codePointAt(index);

Tôi muốn đưa ra một đề nghị nữa là chuyển toàn bộ chuỗi thành mã ascii tương ứng, sử dụng java 8 chẳng hạn, "abcde" thành "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.