2011-09-16 31 views
22

Tôi có một nhân vật:Nhận giá trị ASCII tại từ đầu vào

char ch='A' 

Hãy cho tôi phương pháp mà chuyển đổi char to ASCII
hoặc cách mà trả về một ASCII NUMBER.

Output: 65

+0

tôi đề nghị bạn đọc về unicode, ký tự nhiều byte, và java Character api – CrackerJack9

+1

Có một số lượng lớn các ký tự mà không có một đại diện ASCII' 'ở tất cả: 'char' có một loạt các 65535 trong khi 'ASCII' bị giới hạn ở 128. – Saul

Trả lời

40
char ch='A'; 

System.out.println((int)ch); 
+1

' char' có phạm vi 65535 trong khi 'ASCII' bị giới hạn ở 128. Có một số lượng lớn ký tự không có biểu diễn' ASCII'. Sử dụng một 'int' đánh lừa một trong những suy nghĩ có tồn tại 1-to-1 tương ứng giữa các ký tự Unicode và mã ASCII'. – Saul

+4

@Saul: Thật vậy. Nhưng OP đang yêu cầu cách lấy mã ASCII cho một ký tự, điều này ngụ ý rằng các ký tự mà anh ta quan tâm sẽ có mã ASCII. –

+0

Số Unicode cho các ký tự như vậy bằng với các đối tác ASCII của chúng vì ** Unicode là bộ siêu hoàn chỉnh của ASCII **. Ví dụ, 'A' trong Unicode là' U + 0041' hoặc '65' theo dạng thập phân. Ngược lại, ASCII không có ánh xạ cho 99% 'char'-s. Đó là lý do tôi tranh luận ủng hộ các điểm mã. – Saul

2

char (với một trường hợp thấp hơn c) là một số loại. Nó đã giữ giá trị ascii của char. Chỉ cần bỏ nó vào một số nguyên để hiển thị nó như là một giá trị số chứ không phải là một giá trị văn bản:

System.out.println("char " + ch + " has the following value : " + (int) ch); 
1

chỉ cần làm

int a = ch 

(điều này cũng không có gì để làm với android)

+0

(và downvoting mà không có bình luận là thô lỗ) – njzk2

15

Có là một bản ghi nhớ chính liên quan đến việc nhận mã ASCII có giá trị char.

Theo đúng nghĩa thì không thể thực hiện được.

Đó là vì char có phạm vi 65535 trong khi ASCII bị giới hạn ở 128. Có một số lượng lớn các ký tự không có biểu diễn ASCII nào cả.

Cách thích hợp sẽ là sử dụng một số Unicode code point là số tương đương tiêu chuẩn của một ký tự trong vũ trụ Java.

Rất may, Unicode là tập hợp hoàn chỉnh của ASCII. Điều đó có nghĩa là số Unicode cho các ký tự Latinh bằng với các đối tác ASCII của chúng. Ví dụ: A bằng Unicode là U+0041 hoặc 65 tính theo thập phân. Ngược lại, ASCII không có ánh xạ cho 99% các char. câu chuyện dài ngắn:

char ch = 'A'; 
int cp = String.valueOf(ch).codePointAt(0); 

Bên cạnh đó, một 16-bit nguyên thủychar thực sự đại diện cho một đơn vị đang, không phải là một nhân vật và vì thế hạn chế Basic Multilingual Plane, cho historical reasons. Các đối tượng vượt quá yêu cầu Characterđối tượng đối phó với giới hạn độ dài bit cố định.

+0

String.valueOf là nặng. Đây là một cách rất phức tạp – njzk2

+0

Tuy nhiên, đây là một cách thú vị để nhận được mã unicode thay vì giá trị tương đối so với mã hóa. – njzk2

+0

tại sao bạn sử dụng String.valueOf? đã có char, chỉ cần sử dụng :) – CrackerJack9

4

A char thực sự là một kiểu dữ liệu số - bạn có thể thêm một số vào một ví dụ int. Đó là một số không ghi short (16 bit). Về vấn đề đó, bạn chỉ có thể truyền đầu ra tới, ví dụ: int để lấy giá trị số.

Tuy nhiên bạn cần suy nghĩ thêm một chút về những gì bạn đang hỏi - không phải tất cả các ký tự đều là giá trị ASCII. Bạn mong đợi sản lượng nào cho â, ví dụ hoặc ?

Hơn nữa, tại sao bạn muốn điều này? Trong ngày và tuổi này, bạn nên suy nghĩ về Unicode, chứ không phải ASCII.Nếu bạn cho mọi người biết mục tiêu của bạn là gì và cách bạn định sử dụng giá trị trả về này, chúng tôi gần như chắc chắn có thể cho bạn biết cách tốt hơn để đạt được mục tiêu đó.

+1

Nó không phải là một byte chưa ký: đó là một số nguyên hai byte chưa ký. –

+0

@JB Tốt, tôi đã nghĩ về 'short' - bây giờ đã được sửa. –

2
char a='a'; 
char A='A'; 
System.out.println((int)a +" "+(int)A); 

Output: 
97 65 
Các vấn đề liên quan